Add fuzz testing to 'jsn' and 'qcode'
This commit is contained in:
@ -97,8 +97,7 @@ func Filter(w *bytes.Buffer, b []byte, keys []string) error {
|
||||
case state == expectNumClose &&
|
||||
((b[i] < '0' || b[i] > '9') &&
|
||||
(b[i] != '.' && b[i] != 'e' && b[i] != 'E' && b[i] != '+' && b[i] != '-')):
|
||||
i--
|
||||
e = i
|
||||
e = i - 1
|
||||
|
||||
case state == expectValue &&
|
||||
(b[i] == 'f' || b[i] == 'F' || b[i] == 't' || b[i] == 'T'):
|
||||
|
@ -3,7 +3,7 @@ package jsn
|
||||
import "bytes"
|
||||
|
||||
// FuzzerEntrypoint for Fuzzbuzz
|
||||
func FuzzerEntryPoint(data []byte) int {
|
||||
func Fuzz(data []byte) int {
|
||||
err1 := Validate(string(data))
|
||||
|
||||
var b1 bytes.Buffer
|
||||
@ -28,8 +28,8 @@ func FuzzerEntryPoint(data []byte) int {
|
||||
Keys(data)
|
||||
|
||||
if err1 != nil || err2 != nil || err3 != nil {
|
||||
return -1
|
||||
return 0
|
||||
}
|
||||
|
||||
return 0
|
||||
return 1
|
||||
}
|
||||
|
59
jsn/fuzz_test.go
Normal file
59
jsn/fuzz_test.go
Normal file
@ -0,0 +1,59 @@
|
||||
package jsn
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestFuzzCrashers(t *testing.T) {
|
||||
|
||||
var crashers = []string{
|
||||
"00\"0000\"0{",
|
||||
"6\",\n\t\t\t\"something\": " +
|
||||
"null\n\t\t},\n\t\t{\n\t\t\t\"id" +
|
||||
"\": 12,\n\t\t\t\"full_name" +
|
||||
"\": \"Brenton Bauch Ph" +
|
||||
"D\",\n\t\t\t\"email\": \"ren" +
|
||||
"ee@miller.co\",\n\t\t\t\"_" +
|
||||
"_twitter_id\": 1\n\t\t}," +
|
||||
"\n\t\t{\n\t\t\t\"id\": 13,\n\t\t" +
|
||||
"\t\"full_name\": \"Daine" +
|
||||
" Gleichner\",\n\t\t\t\"ema" +
|
||||
"il\": \"andrea@gmail.c" +
|
||||
"om\",\n\t\t\t\"__twitter_i" +
|
||||
"d\": \"\",\n\t\t\t\"id__twit" +
|
||||
"ter_id\": \"NOOO\",\n\t\t\t" +
|
||||
"\"work_email\": \"andre" +
|
||||
"a@nienow.co\"\n\t\t}\n\t]}" +
|
||||
"\n\t}",
|
||||
"0000\"0000\"0{",
|
||||
"0000\"\"{",
|
||||
"0000\"000\"{",
|
||||
"0\"\"{",
|
||||
"\"0\"{",
|
||||
"000\"0\"{",
|
||||
"0\"0000\"0{",
|
||||
"000\"\"{",
|
||||
"0\"00\"{",
|
||||
"000\"0000\"0{",
|
||||
"000\"00\"{",
|
||||
"\"\"{",
|
||||
"0\"0000\"{",
|
||||
"\"000\"00{",
|
||||
"0000\"00\"{",
|
||||
"00\"0\"{",
|
||||
"0\"0\"{",
|
||||
"000\"0000\"{",
|
||||
"00\"0000\"{",
|
||||
"0000\"0000\"{",
|
||||
"\"000\"{",
|
||||
"00\"00\"{",
|
||||
"00\"0000\"00{",
|
||||
"0\"0000\"00{",
|
||||
"00\"\"{",
|
||||
"0000\"0\"{",
|
||||
"000\"000\"{",
|
||||
"\"00000000\"{",
|
||||
}
|
||||
|
||||
for _, f := range crashers {
|
||||
Fuzz([]byte(f))
|
||||
}
|
||||
}
|
@ -105,8 +105,7 @@ func Get(b []byte, keys [][]byte) []Field {
|
||||
case state == expectNumClose &&
|
||||
((b[i] < '0' || b[i] > '9') &&
|
||||
(b[i] != '.' && b[i] != 'e' && b[i] != 'E' && b[i] != '+' && b[i] != '-')):
|
||||
i--
|
||||
e = i
|
||||
e = i - 1
|
||||
|
||||
case state == expectValue &&
|
||||
(b[i] == 'f' || b[i] == 'F' || b[i] == 't' || b[i] == 'T'):
|
||||
|
@ -12,6 +12,7 @@ func Keys(b []byte) [][]byte {
|
||||
ae := 0
|
||||
|
||||
for i := 0; i < len(b); i++ {
|
||||
|
||||
if state == expectObjClose || state == expectListClose {
|
||||
switch b[i] {
|
||||
case '{', '[':
|
||||
@ -88,8 +89,7 @@ func Keys(b []byte) [][]byte {
|
||||
case state == expectNumClose &&
|
||||
((b[i] < '0' || b[i] > '9') &&
|
||||
(b[i] != '.' && b[i] != 'e' && b[i] != 'E' && b[i] != '+' && b[i] != '-')):
|
||||
i--
|
||||
e = i
|
||||
e = i - 1
|
||||
|
||||
case state == expectValue &&
|
||||
(b[i] == 'f' || b[i] == 'F' || b[i] == 't' || b[i] == 'T'):
|
||||
|
@ -86,8 +86,7 @@ func Replace(w *bytes.Buffer, b []byte, from, to []Field) error {
|
||||
case state == expectNumClose &&
|
||||
((b[i] < '0' || b[i] > '9') &&
|
||||
(b[i] != '.' && b[i] != 'e' && b[i] != 'E' && b[i] != '+' && b[i] != '-')):
|
||||
i--
|
||||
e = i
|
||||
e = i - 1
|
||||
|
||||
case state == expectValue &&
|
||||
(b[i] == 'f' || b[i] == 'F' || b[i] == 't' || b[i] == 'T'):
|
||||
@ -156,7 +155,7 @@ func Replace(w *bytes.Buffer, b []byte, from, to []Field) error {
|
||||
|
||||
if ws == -1 || (ws == 0 && we == len(b)) {
|
||||
w.Write(b)
|
||||
} else {
|
||||
} else if ws < we {
|
||||
w.Write(b[ws:we])
|
||||
}
|
||||
|
||||
|
@ -70,8 +70,7 @@ func Strip(b []byte, path [][]byte) []byte {
|
||||
case state == expectNumClose &&
|
||||
((b[i] < '0' || b[i] > '9') &&
|
||||
(b[i] != '.' && b[i] != 'e' && b[i] != 'E' && b[i] != '+' && b[i] != '-')):
|
||||
i--
|
||||
e = i
|
||||
e = i - 1
|
||||
|
||||
case state == expectValue &&
|
||||
(b[i] == 'f' || b[i] == 'F' || b[i] == 't' || b[i] == 'T'):
|
||||
|
Reference in New Issue
Block a user