2019-10-27 06:52:48 +01:00
|
|
|
// +build gofuzz
|
2019-09-20 06:19:11 +02:00
|
|
|
|
2019-10-27 06:52:48 +01:00
|
|
|
package jsn
|
2019-09-20 06:19:11 +02:00
|
|
|
|
2020-05-29 06:08:37 +02:00
|
|
|
import (
|
|
|
|
"bytes"
|
|
|
|
"errors"
|
|
|
|
)
|
|
|
|
|
2019-10-26 09:02:05 +02:00
|
|
|
func Fuzz(data []byte) int {
|
2020-05-29 06:08:37 +02:00
|
|
|
c := 0
|
|
|
|
|
|
|
|
if err := Validate(string(data)); err == nil {
|
|
|
|
c = 1
|
|
|
|
}
|
|
|
|
|
|
|
|
if err := fuzzTest(data); err == nil {
|
|
|
|
c = 1
|
|
|
|
}
|
|
|
|
|
|
|
|
return c
|
|
|
|
}
|
|
|
|
|
|
|
|
func fuzzTest(data []byte) error {
|
|
|
|
err1 := Validate(string(data))
|
|
|
|
|
|
|
|
var b1 bytes.Buffer
|
|
|
|
err2 := Filter(&b1, data, []string{"id", "full_name", "embed"})
|
|
|
|
|
|
|
|
path1 := [][]byte{[]byte("data"), []byte("users")}
|
|
|
|
Strip(data, path1)
|
|
|
|
|
|
|
|
from := []Field{
|
|
|
|
{[]byte("__twitter_id"), []byte(`[{ "name": "hello" }, { "name": "world"}]`)},
|
|
|
|
{[]byte("__twitter_id"), []byte(`"ABC123"`)},
|
|
|
|
}
|
|
|
|
|
|
|
|
to := []Field{
|
|
|
|
{[]byte("__twitter_id"), []byte(`"1234567890"`)},
|
|
|
|
{[]byte("some_list"), []byte(`[{"id":1,"embed":{"id":8}},{"id":2},{"id":3},{"id":4},{"id":5},{"id":6},{"id":7},{"id":8},{"id":9},{"id":10},{"id":11},{"id":12},{"id":13}]`)},
|
|
|
|
}
|
|
|
|
|
|
|
|
var b2 bytes.Buffer
|
|
|
|
err3 := Replace(&b2, data, from, to)
|
|
|
|
|
|
|
|
Keys(data)
|
|
|
|
|
|
|
|
var b3 bytes.Buffer
|
|
|
|
err4 := Clear(&b3, data)
|
|
|
|
|
|
|
|
if err1 != nil || err2 != nil || err3 != nil || err4 != nil {
|
|
|
|
return errors.New("there was an error")
|
2019-09-20 06:19:11 +02:00
|
|
|
}
|
|
|
|
|
2020-05-29 06:08:37 +02:00
|
|
|
return nil
|
2019-09-20 06:19:11 +02:00
|
|
|
}
|