Add fuzz Makefile target and run fuzzer corpus in make check.

This commit is contained in:
Todd C. Miller
2021-02-08 04:56:17 -07:00
parent 30d9497eb6
commit 63a3f62547
21 changed files with 113 additions and 3 deletions

View File

@@ -701,6 +701,7 @@ plugins/sudoers/regress/env_match/check_env_pattern.c
plugins/sudoers/regress/env_match/data plugins/sudoers/regress/env_match/data
plugins/sudoers/regress/exptilde/check_exptilde.c plugins/sudoers/regress/exptilde/check_exptilde.c
plugins/sudoers/regress/fuzz/fuzz_sudoers.c plugins/sudoers/regress/fuzz/fuzz_sudoers.c
plugins/sudoers/regress/fuzz/fuzz_sudoers.out.ok
plugins/sudoers/regress/fuzz/fuzz_sudoers_ldif.c plugins/sudoers/regress/fuzz/fuzz_sudoers_ldif.c
plugins/sudoers/regress/iolog_plugin/check_iolog_plugin.c plugins/sudoers/regress/iolog_plugin/check_iolog_plugin.c
plugins/sudoers/regress/parser/check_addr.c plugins/sudoers/regress/parser/check_addr.c

View File

@@ -110,7 +110,7 @@ all: config.status
exit $$?; \ exit $$?; \
done done
check pre-install: config.status fuzz check pre-install: config.status
for d in $(SUBDIRS); do \ for d in $(SUBDIRS); do \
(cd $$d && exec $(MAKE) $@) && continue; \ (cd $$d && exec $(MAKE) $@) && continue; \
exit $$?; \ exit $$?; \

View File

@@ -404,6 +404,8 @@ pvs-log-files:
pvs-studio: pvs-studio:
fuzz:
check: check:
clean: clean:

View File

@@ -102,6 +102,8 @@ pvs-log-files:
pvs-studio: pvs-studio:
fuzz:
check: check:
clean: clean:

View File

@@ -88,6 +88,8 @@ pvs-log-files:
pvs-studio: pvs-studio:
fuzz:
check: check:
clean: clean:

View File

@@ -144,6 +144,8 @@ cppcheck:
pvs-log-files: $(POBJS) pvs-log-files: $(POBJS)
fuzz:
check: $(TEST_PROGS) check: $(TEST_PROGS)
@if test X"$(cross_compiling)" != X"yes"; then \ @if test X"$(cross_compiling)" != X"yes"; then \
LC_ALL=C; export LC_ALL; \ LC_ALL=C; export LC_ALL; \

View File

@@ -137,6 +137,8 @@ cppcheck:
pvs-log-files: $(POBJS) pvs-log-files: $(POBJS)
fuzz:
check: check:
clean: clean:

View File

@@ -191,7 +191,17 @@ cppcheck:
pvs-log-files: $(POBJS) pvs-log-files: $(POBJS)
check: $(TEST_PROGS) $(FUZZ_PROGS) fuzz: $(FUZZ_PROGS)
@if test X"$(cross_compiling)" != X"yes"; then \
echo "fuzz_iolog_legacy: verifying corpus"; \
./fuzz_iolog_legacy $(srcdir)/regress/corpus/log_legacy/*; \
echo "fuzz_iolog_json: verifying corpus"; \
./fuzz_iolog_json $(srcdir)/regress/corpus/log_json/*; \
echo "fuzz_iolog_timing: verifying corpus"; \
./fuzz_iolog_timing $(srcdir)/regress/corpus/timing/*; \
fi
check: $(TEST_PROGS) fuzz
@if test X"$(cross_compiling)" != X"yes"; then \ @if test X"$(cross_compiling)" != X"yes"; then \
LC_ALL=C; export LC_ALL; \ LC_ALL=C; export LC_ALL; \
unset LANG || LANG=; \ unset LANG || LANG=; \

View File

@@ -146,6 +146,8 @@ cppcheck:
pvs-log-files: $(POBJS) pvs-log-files: $(POBJS)
fuzz:
check: check:
clean: clean:

View File

@@ -313,6 +313,8 @@ cppcheck:
pvs-log-files: $(POBJS) pvs-log-files: $(POBJS)
fuzz:
# Note: some regress checks are run from srcdir for consistent error messages # Note: some regress checks are run from srcdir for consistent error messages
check: $(TEST_PROGS) check: $(TEST_PROGS)
@if test X"$(cross_compiling)" != X"yes"; then \ @if test X"$(cross_compiling)" != X"yes"; then \

View File

@@ -159,6 +159,8 @@ pvs-log-files:
pvs-studio: pvs-studio:
fuzz:
check: check:
clean: clean:

View File

@@ -187,6 +187,8 @@ pvs-log-files: $(POBJS)
pvs-studio: $(POBJS) pvs-studio: $(POBJS)
plog-converter $(PVS_LOG_OPTS) $(POBJS) plog-converter $(PVS_LOG_OPTS) $(POBJS)
fuzz:
check: check:
clean: clean:

View File

@@ -179,6 +179,8 @@ pvs-log-files: $(POBJS)
pvs-studio: $(POBJS) pvs-studio: $(POBJS)
plog-converter $(PVS_LOG_OPTS) $(POBJS) plog-converter $(PVS_LOG_OPTS) $(POBJS)
fuzz:
check: check:
clean: clean:

View File

@@ -182,6 +182,8 @@ pvs-log-files: $(POBJS)
pvs-studio: $(POBJS) pvs-studio: $(POBJS)
plog-converter $(PVS_LOG_OPTS) $(POBJS) plog-converter $(PVS_LOG_OPTS) $(POBJS)
fuzz:
check: check:
clean: clean:

View File

@@ -218,6 +218,8 @@ realclean: distclean
cleandir: realclean cleandir: realclean
fuzz:
check: $(TEST_PROGS) check: $(TEST_PROGS)
@if test X"$(cross_compiling)" != X"yes"; then \ @if test X"$(cross_compiling)" != X"yes"; then \
./check_python_examples ".libs/python_plugin.so"; \ ./check_python_examples ".libs/python_plugin.so"; \

View File

@@ -177,6 +177,8 @@ pvs-log-files: $(POBJS)
pvs-studio: $(POBJS) pvs-studio: $(POBJS)
plog-converter $(PVS_LOG_OPTS) $(POBJS) plog-converter $(PVS_LOG_OPTS) $(POBJS)
fuzz:
check: check:
clean: clean:

View File

@@ -179,6 +179,8 @@ pvs-log-files: $(POBJS)
pvs-studio: $(POBJS) pvs-studio: $(POBJS)
plog-converter $(PVS_LOG_OPTS) $(POBJS) plog-converter $(PVS_LOG_OPTS) $(POBJS)
fuzz:
check: check:
clean: clean:

View File

@@ -474,7 +474,17 @@ pvs-log-files: $(POBJS)
pvs-studio: $(POBJS) pvs-studio: $(POBJS)
plog-converter $(PVS_LOG_OPTS) $(POBJS) plog-converter $(PVS_LOG_OPTS) $(POBJS)
check: $(TEST_PROGS) $(FUZZ_PROGS) visudo testsudoers cvtsudoers fuzz: $(FUZZ_PROGS)
@if test X"$(cross_compiling)" != X"yes"; then \
echo "fuzz_sudoers: verifying corpus"; \
mkdir -p regress/fuzz; \
./fuzz_sudoers $(srcdir)/sudoers $(srcdir)/regress/sudoers/*.in > regress/fuzz/fuzz_sudoers.out 2>&1; \
diff $(srcdir)/regress/fuzz/fuzz_sudoers.out.ok regress/fuzz/fuzz_sudoers.out; \
echo "fuzz_sudoers-ldif: verifying corpus"; \
./fuzz_sudoers_ldif $(srcdir)/regress/sudoers/*.ldif.ok; \
fi
check: $(TEST_PROGS) visudo testsudoers cvtsudoers fuzz
@if test X"$(cross_compiling)" != X"yes"; then \ @if test X"$(cross_compiling)" != X"yes"; then \
LC_ALL=C; export LC_ALL; \ LC_ALL=C; export LC_ALL; \
unset LANG || LANG=; \ unset LANG || LANG=; \

View File

@@ -0,0 +1,57 @@
sudoers:1:6: syntax error
bogus
^
sudoers:1:17: syntax error
user ALL = (ALL)
^
sudoers:1:17: syntax error
user ALL = (ALL)
^
sudoers:4:21: invalid timeout value
user0 ALL = TIMEOUT=7dd4h10m30s /usr/bin/id, /usr/bin/who, TIMEOUT=0 /bin/ls
^~~~~~~~~~~
sudoers:5:21: invalid timeout value
user1 ALL = TIMEOUT=7d4h10mm30s /usr/bin/id
^~~~~~~~~~~
sudoers:6:21: invalid timeout value
user2 ALL = TIMEOUT=4hg10m30s /usr/bin/id
^~~~~~~~~
sudoers:7:21: invalid timeout value
user3 ALL = TIMEOUT=10m30ss /usr/bin/id
^~~~~~~
sudoers:8:21: invalid timeout value
user4 ALL = TIMEOUT=14g /usr/bin/id
^~~
sudoers:4:28: syntax error
foo ALL = CWD=~ron /bin/ls \
^~
sudoers:7:1: invalid line continuation
User_Alias BAR = bar
^~~~~~~~~~
sudoers:2:19: empty string
User_Alias FOO = ""
^
sudoers:3:2: empty string
"" ALL = ALL
^
sudoers:2:21: empty group
User_Alias FOO1 = "%"
^
sudoers:3:22: empty group
User_Alias FOO2 = "%:"
^
sudoers:4:21: empty netgroup
User_Alias FOO3 = "+"
^
sudoers:5:19: empty group
User_Alias FOO4 = %
^
sudoers:6:19: empty group
User_Alias FOO5 = %:
^~
sudoers:7:19: empty netgroup
User_Alias FOO6 = +
^
sudoers:8:20: unexpected line break in string
User_Alias UA4 = "x
^

View File

@@ -182,6 +182,8 @@ pvs-log-files: $(POBJS)
pvs-studio: $(POBJS) pvs-studio: $(POBJS)
plog-converter $(PVS_LOG_OPTS) $(POBJS) plog-converter $(PVS_LOG_OPTS) $(POBJS)
fuzz:
check: check:
clean: clean:

View File

@@ -263,6 +263,8 @@ pvs-log-files: $(POBJS)
pvs-studio: $(POBJS) pvs-studio: $(POBJS)
plog-converter $(PVS_LOG_OPTS) $(POBJS) plog-converter $(PVS_LOG_OPTS) $(POBJS)
fuzz:
check: $(TEST_PROGS) check: $(TEST_PROGS)
@if test X"$(cross_compiling)" != X"yes"; then \ @if test X"$(cross_compiling)" != X"yes"; then \
MALLOC_OPTIONS=S; export MALLOC_OPTIONS; \ MALLOC_OPTIONS=S; export MALLOC_OPTIONS; \