else/SnudownTest/fuzzing/Makefile
2015-11-20 04:08:53 -08:00

62 lines
2 KiB
Makefile

# Copyright (c) 2015, reddit inc.
#
# Permission to use, copy, modify, and distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
all: gumbo_snudown snudown-validator
.PHONY: all clean gumbo_snudown snudown-validator build_dir
build_dir:
mkdir -p build
# Our modified gumbo for finding security-relevant syntax issues
gumbo_snudown: build_dir
mkdir -p build/gumbo_snudown
git submodule update --recursive
@[ -f "${CURDIR}/gumbo_snudown/configure" ] || { \
cd gumbo_snudown; \
./autogen.sh; \
./configure --prefix=$(CURDIR)/build/gumbo_snudown; \
}
# Don't build this with AFL instrumentation, I'm assuming Google
# already ran their own fuzzer over their own parser...
$(MAKE) -C gumbo_snudown all install
gperf_src:
cd ../src/ && gperf html_entities.gperf --output-file=html_entities.h
# executable
snudown-validator: build_dir gumbo_snudown gperf_src
cd build && cmake .. -DCMAKE_C_COMPILER=$(AFL_PATH)/afl-gcc
$(MAKE) -C build all
# stuff for fuzzing
gen_testcases:
mkdir -p testing/testcases
rm -f testing/testcases/test_default_*.md
python2.7 gen_testcases.py
afl: gen_testcases snudown-validator
@[ -n "$(AFL_PATH)" ] || { echo '$$AFL_PATH not set'; false; }
@mkdir -p testing/afl_results
$(AFL_PATH)/afl-fuzz \
-i testing/testcases \
-o testing/afl_results \
-t 100 \
-m none \
./build/snudown-validator
# housekeeping
clean:
rm -rf *.o
rm -rf build/