63 lines
2 KiB
Makefile
63 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/
|