Skip to content

Commit

Permalink
Merge pull request #167 from chenxiaolong/fuzz
Browse files Browse the repository at this point in the history
Add fuzzer for FEC image parser
  • Loading branch information
chenxiaolong authored Sep 28, 2023
2 parents cd779e6 + 2a57343 commit 7e89e90
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 7e89e90

Please sign in to comment.