1
0
mirror of https://github.com/janet-lang/janet synced 2024-11-28 11:09:54 +00:00

Merge pull request #337 from andrewchambers/fuzzunmarshal

Setup some simple fuzz helpers for unmarshal.
This commit is contained in:
Calvin Rose 2020-04-05 08:17:42 -05:00 committed by GitHub
commit 553e38ffd6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 67 additions and 2 deletions

View File

@ -3,12 +3,26 @@
To use these, you need to install afl (of course), and xterm. A tiling window manager helps manage To use these, you need to install afl (of course), and xterm. A tiling window manager helps manage
many concurrent fuzzer instances. many concurrent fuzzer instances.
Note, afl sometimes requires system configuration, if you find AFL quitting prematurely, try manually
launching it and addressing any error messages.
## Fuzz the parser ## Fuzz the parser
``` ```
$ sh ./tools/afl/prepare_to_fuzz.sh $ sh ./tools/afl/prepare_to_fuzz.sh
export NFUZZ=1 $ export NFUZZ=1
$ sh ./tools/afl/fuzz.sh parser $ sh ./tools/afl/fuzz.sh parser
Ctrl+C when done to close all fuzzer terminals. Ctrl+C when done to close all fuzzer terminals.
$ sh ./tools/afl/aggregate_cases.sh parser $ sh ./tools/afl/aggregate_cases.sh parser
$ ls ./fuzz_out/parser_aggregated/ $ ls ./fuzz_out/parser_aggregated/
``` ```
## Fuzz the unmarshaller
```
$ janet ./tools/afl/generate_unmarshal_testcases.janet
$ sh ./tools/afl/prepare_to_fuzz.sh
$ export NFUZZ=1
$ sh ./tools/afl/fuzz.sh unmarshal
Ctrl+C when done to close all fuzzer terminals.
$ sh ./tools/afl/aggregate_cases.sh unmarshal
$ ls ./fuzz_out/unmarshal_aggregated/
```

View File

@ -0,0 +1,49 @@
(os/mkdir "./tools/afl/unmarshal_testcases/")
(defn spit-case [n v]
(spit
(string "./tools/afl/unmarshal_testcases/" (string n))
(marshal v make-image-dict)))
(def cases [
nil
"abc"
:def
'hij
123
(int/s64 123)
"7"
[1 2 3]
@[1 2 3]
{:a 123}
@{:b 'xyz}
(peg/compile
'{:a (* "a" :b "a")
:b (* "b" (+ :a 0) "b")
:main (* "(" :b ")")})
(fn f [a] (fn [] {:ab a}))
(fn f [a] (print "hello world!"))
(do
(defn f [a] (yield) @[1 "2"])
(def fb (fiber/new f))
(resume fb)
fb)
])
(eachk i cases
(spit-case i (in cases i)))

View File

@ -0,0 +1,2 @@
(pp (unmarshal (slurp ((dyn :args) 1)) load-image-dict))