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:
commit
553e38ffd6
@ -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/
|
||||||
|
```
|
||||||
|
49
tools/afl/generate_unmarshal_testcases.janet
Normal file
49
tools/afl/generate_unmarshal_testcases.janet
Normal 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)))
|
2
tools/afl/unmarshal_runner.janet
Normal file
2
tools/afl/unmarshal_runner.janet
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
(pp (unmarshal (slurp ((dyn :args) 1)) load-image-dict))
|
||||||
|
|
Loading…
Reference in New Issue
Block a user