Skip to content

Commit

Permalink
Add fuzzer for FEC image parser
Browse files Browse the repository at this point in the history
Issue: #157

Signed-off-by: Andrew Gunnerson <[email protected]>
  • Loading branch information
chenxiaolong committed Sep 28, 2023
1 parent cd779e6 commit 686ece9
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 0 deletions.
3 changes: 3 additions & 0 deletions fuzz/hfuzz_workspace/fec/input/foobar.fec
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S��9K3U�ֹ�1S����< ���K�y�7n�*
u�_�ZE/'��&����< ���K�y�7n�*
u�_�ZE/'��&
36 changes: 36 additions & 0 deletions fuzz/src/bin/fec.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
#[cfg(not(windows))]
mod fuzz {
use std::{io::Cursor, sync::atomic::AtomicBool};

use avbroot::{
format::fec::FecImage,
stream::{FromReader, SharedCursor, WriteZerosExt},
};
use honggfuzz::fuzz;

pub fn main() {
loop {
fuzz!(|data: &[u8]| {
let cancel_signal = AtomicBool::new(false);

let reader = Cursor::new(data);
if let Ok(fec) = FecImage::from_reader(reader) {
let mut input = SharedCursor::new();

// Allow verify() to get further, but don't blow up the host
// with excessive memory usage.
if fec.data_size < 64 * 1024 * 1024 {
input.write_zeros_exact(fec.data_size).unwrap();
}

let _ = fec.verify(|| Ok(Box::new(input.reopen())), &cancel_signal);
}
});
}
}
}

fn main() {
#[cfg(not(windows))]
fuzz::main();
}

0 comments on commit 686ece9

Please sign in to comment.