Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,8 @@ pcre2posix_test.exe
pcre2posix_test.log
pcre2posix_test.trs
pcre2demo
pcre2fuzzcheck
pcre2fuzzcheck-*
pcre2fuzzer-*
pcre2grep
pcre2grep.exe
pcre2test
Expand Down
52 changes: 44 additions & 8 deletions Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -540,28 +540,64 @@ if WITH_GCOV
pcre2grep_CFLAGS += $(GCOV_CFLAGS)
pcre2grep_LDADD += $(GCOV_LIBS)
endif # WITH_GCOV
endif # WITH_PCRE2_8

## If fuzzer support is enabled, build a non-distributed library containing the
## fuzzing function. Also build the standalone checking binary from the same
## source but using -DSTANDALONE.

if WITH_FUZZ_SUPPORT
noinst_LIBRARIES = .libs/libpcre2-fuzzsupport.a
noinst_LIBRARIES =
if WITH_PCRE2_8
noinst_LIBRARIES += .libs/libpcre2-fuzzsupport.a
_libs_libpcre2_fuzzsupport_a_SOURCES = src/pcre2_fuzzsupport.c
_libs_libpcre2_fuzzsupport_a_CFLAGS = $(AM_CFLAGS)
_libs_libpcre2_fuzzsupport_a_LIBADD =

noinst_PROGRAMS += pcre2fuzzcheck
pcre2fuzzcheck_SOURCES = src/pcre2_fuzzsupport.c
pcre2fuzzcheck_CFLAGS = -DSTANDALONE $(AM_CFLAGS)
pcre2fuzzcheck_LDADD = libpcre2-8.la
noinst_PROGRAMS += pcre2fuzzcheck-8
pcre2fuzzcheck_8_SOURCES = src/pcre2_fuzzsupport.c
pcre2fuzzcheck_8_CFLAGS = -DSTANDALONE $(AM_CFLAGS)
pcre2fuzzcheck_8_LDADD = libpcre2-8.la
if WITH_GCOV
pcre2fuzzcheck_CFLAGS += $(GCOV_CFLAGS)
pcre2fuzzcheck_LDADD += $(GCOV_LIBS)
pcre2fuzzcheck_8_CFLAGS += $(GCOV_CFLAGS)
pcre2fuzzcheck_8_LDADD += $(GCOV_LIBS)
endif # WITH_GCOV
endif # WITH FUZZ_SUPPORT
endif # WITH_PCRE2_8

if WITH_PCRE2_16
noinst_LIBRARIES += .libs/libpcre2-fuzzsupport-16.a
_libs_libpcre2_fuzzsupport_16_a_SOURCES = src/pcre2_fuzzsupport.c
_libs_libpcre2_fuzzsupport_16_a_CFLAGS = $(AM_CFLAGS) -DPCRE2_CODE_UNIT_WIDTH=16
_libs_libpcre2_fuzzsupport_16_a_LIBADD =

noinst_PROGRAMS += pcre2fuzzcheck-16
pcre2fuzzcheck_16_SOURCES = src/pcre2_fuzzsupport.c
pcre2fuzzcheck_16_CFLAGS = -DSTANDALONE $(AM_CFLAGS) -DPCRE2_CODE_UNIT_WIDTH=16
pcre2fuzzcheck_16_LDADD = libpcre2-16.la
if WITH_GCOV
pcre2fuzzcheck_16_CFLAGS += $(GCOV_CFLAGS)
pcre2fuzzcheck_16_LDADD += $(GCOV_LIBS)
endif # WITH_GCOV
endif # WITH_PCRE2_16

if WITH_PCRE2_32
noinst_LIBRARIES += .libs/libpcre2-fuzzsupport-32.a
_libs_libpcre2_fuzzsupport_32_a_SOURCES = src/pcre2_fuzzsupport.c
_libs_libpcre2_fuzzsupport_32_a_CFLAGS = $(AM_CFLAGS) -DPCRE2_CODE_UNIT_WIDTH=32
_libs_libpcre2_fuzzsupport_32_a_LIBADD =

noinst_PROGRAMS += pcre2fuzzcheck-32
pcre2fuzzcheck_32_SOURCES = src/pcre2_fuzzsupport.c
pcre2fuzzcheck_32_CFLAGS = -DSTANDALONE $(AM_CFLAGS) -DPCRE2_CODE_UNIT_WIDTH=32
pcre2fuzzcheck_32_LDADD = libpcre2-32.la
if WITH_GCOV
pcre2fuzzcheck_32_CFLAGS += $(GCOV_CFLAGS)
pcre2fuzzcheck_32_LDADD += $(GCOV_LIBS)
endif # WITH_GCOV
endif # WITH_PCRE2_32

endif # WITH_FUZZ_SUPPORT

## -------- Testing ----------

## If the 8-bit library is enabled, build the POSIX wrapper test program and
Expand Down
50 changes: 50 additions & 0 deletions pcre2_fuzzer_16.dict
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# This is attempt at a fuzzer dictionary for PCRE2.

"\\\x00A\x00"
"\\\x00b\x00"
"\\\x00B\x00"
"\\\x00d\x00"
"\\\x00D\x00"
"\\\x00h\x00"
"\\\x00H\x00"
"\\\x00n\x00"
"\\\x00N\x00"
"\\\x00s\x00"
"\\\x00S\x00"
"\\\x00w\x00"
"\\\x00W\x00"
"\\\x00z\x00"
"\\\x00Z\x00"

"(\x00?\x00"
"(\x00?\x00:\x00"
"(\x00?\x00>\x00"
"(\x00?\x00=\x00"
"(\x00?\x00!\x00"
"(\x00?\x00<\x00=\x00"
"(\x00?\x00<\x00!\x00"
"(\x00?\x00|\x00"

"[\x00:\x00a\x00l\x00n\x00u\x00m\x00:\x00]\x00"
"[\x00:\x00a\x00l\x00p\x00h\x00a\x00:\x00]\x00"
"[\x00:\x00a\x00s\x00c\x00i\x00i\x00:\x00]\x00"
"[\x00:\x00b\x00l\x00a\x00n\x00k\x00:\x00]\x00"
"[\x00:\x00c\x00n\x00t\x00r\x00l\x00:\x00]\x00"
"[\x00:\x00d\x00i\x00g\x00i\x00t\x00:\x00]\x00"
"[\x00:\x00g\x00r\x00a\x00p\x00h\x00:\x00]\x00"
"[\x00:\x00l\x00o\x00w\x00e\x00r\x00:\x00]\x00"
"[\x00:\x00p\x00r\x00i\x00n\x00t\x00:\x00]\x00"
"[\x00:\x00p\x00u\x00n\x00c\x00t\x00:\x00]\x00"
"[\x00:\x00s\x00p\x00a\x00c\x00e\x00:\x00]\x00"
"[\x00:\x00u\x00p\x00p\x00e\x00r\x00:\x00]\x00"
"[\x00:\x00w\x00o\x00r\x00d\x00:\x00]\x00"
"[\x00:\x00x\x00d\x00i\x00g\x00i\x00t\x00:\x00]\x00"

"(\x00*\x00A\x00C\x00C\x00E\x00P\x00T\x00)\x00"
"(\x00*\x00F\x00A\x00I\x00L\x00)\x00"
"(\x00*\x00C\x00O\x00M\x00M\x00I\x00T\x00)\x00"
"(\x00*\x00P\x00R\x00U\x00N\x00E\x00)\x00"
"(\x00*\x00S\x00K\x00I\x00P\x00)\x00"
"(\x00*\x00T\x00H\x00E\x00N\x00)\x00"

# End
2 changes: 2 additions & 0 deletions pcre2_fuzzer_16.options
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
[libfuzzer]
dict = pcre2_fuzzer_16.dict
50 changes: 50 additions & 0 deletions pcre2_fuzzer_32.dict
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# This is attempt at a fuzzer dictionary for PCRE2.

"\\\x00\x00\x00A\x00\x00\x00"
"\\\x00\x00\x00b\x00\x00\x00"
"\\\x00\x00\x00B\x00\x00\x00"
"\\\x00\x00\x00d\x00\x00\x00"
"\\\x00\x00\x00D\x00\x00\x00"
"\\\x00\x00\x00h\x00\x00\x00"
"\\\x00\x00\x00H\x00\x00\x00"
"\\\x00\x00\x00n\x00\x00\x00"
"\\\x00\x00\x00N\x00\x00\x00"
"\\\x00\x00\x00s\x00\x00\x00"
"\\\x00\x00\x00S\x00\x00\x00"
"\\\x00\x00\x00w\x00\x00\x00"
"\\\x00\x00\x00W\x00\x00\x00"
"\\\x00\x00\x00z\x00\x00\x00"
"\\\x00\x00\x00Z\x00\x00\x00"

"(\x00\x00\x00?\x00\x00\x00"
"(\x00\x00\x00?\x00\x00\x00:\x00\x00\x00"
"(\x00\x00\x00?\x00\x00\x00>\x00\x00\x00"
"(\x00\x00\x00?\x00\x00\x00=\x00\x00\x00"
"(\x00\x00\x00?\x00\x00\x00!\x00\x00\x00"
"(\x00\x00\x00?\x00\x00\x00<\x00\x00\x00=\x00\x00\x00"
"(\x00\x00\x00?\x00\x00\x00<\x00\x00\x00!\x00\x00\x00"
"(\x00\x00\x00?\x00\x00\x00|\x00\x00\x00"

"[\x00\x00\x00:\x00\x00\x00a\x00\x00\x00l\x00\x00\x00n\x00\x00\x00u\x00\x00\x00m\x00\x00\x00:\x00\x00\x00]\x00\x00\x00"
"[\x00\x00\x00:\x00\x00\x00a\x00\x00\x00l\x00\x00\x00p\x00\x00\x00h\x00\x00\x00a\x00\x00\x00:\x00\x00\x00]\x00\x00\x00"
"[\x00\x00\x00:\x00\x00\x00a\x00\x00\x00s\x00\x00\x00c\x00\x00\x00i\x00\x00\x00i\x00\x00\x00:\x00\x00\x00]\x00\x00\x00"
"[\x00\x00\x00:\x00\x00\x00b\x00\x00\x00l\x00\x00\x00a\x00\x00\x00n\x00\x00\x00k\x00\x00\x00:\x00\x00\x00]\x00\x00\x00"
"[\x00\x00\x00:\x00\x00\x00c\x00\x00\x00n\x00\x00\x00t\x00\x00\x00r\x00\x00\x00l\x00\x00\x00:\x00\x00\x00]\x00\x00\x00"
"[\x00\x00\x00:\x00\x00\x00d\x00\x00\x00i\x00\x00\x00g\x00\x00\x00i\x00\x00\x00t\x00\x00\x00:\x00\x00\x00]\x00\x00\x00"
"[\x00\x00\x00:\x00\x00\x00g\x00\x00\x00r\x00\x00\x00a\x00\x00\x00p\x00\x00\x00h\x00\x00\x00:\x00\x00\x00]\x00\x00\x00"
"[\x00\x00\x00:\x00\x00\x00l\x00\x00\x00o\x00\x00\x00w\x00\x00\x00e\x00\x00\x00r\x00\x00\x00:\x00\x00\x00]\x00\x00\x00"
"[\x00\x00\x00:\x00\x00\x00p\x00\x00\x00r\x00\x00\x00i\x00\x00\x00n\x00\x00\x00t\x00\x00\x00:\x00\x00\x00]\x00\x00\x00"
"[\x00\x00\x00:\x00\x00\x00p\x00\x00\x00u\x00\x00\x00n\x00\x00\x00c\x00\x00\x00t\x00\x00\x00:\x00\x00\x00]\x00\x00\x00"
"[\x00\x00\x00:\x00\x00\x00s\x00\x00\x00p\x00\x00\x00a\x00\x00\x00c\x00\x00\x00e\x00\x00\x00:\x00\x00\x00]\x00\x00\x00"
"[\x00\x00\x00:\x00\x00\x00u\x00\x00\x00p\x00\x00\x00p\x00\x00\x00e\x00\x00\x00r\x00\x00\x00:\x00\x00\x00]\x00\x00\x00"
"[\x00\x00\x00:\x00\x00\x00w\x00\x00\x00o\x00\x00\x00r\x00\x00\x00d\x00\x00\x00:\x00\x00\x00]\x00\x00\x00"
"[\x00\x00\x00:\x00\x00\x00x\x00\x00\x00d\x00\x00\x00i\x00\x00\x00g\x00\x00\x00i\x00\x00\x00t\x00\x00\x00:\x00\x00\x00]\x00\x00\x00"

"(\x00\x00\x00*\x00\x00\x00A\x00\x00\x00C\x00\x00\x00C\x00\x00\x00E\x00\x00\x00P\x00\x00\x00T\x00\x00\x00)\x00\x00\x00"
"(\x00\x00\x00*\x00\x00\x00F\x00\x00\x00A\x00\x00\x00I\x00\x00\x00L\x00\x00\x00)\x00\x00\x00"
"(\x00\x00\x00*\x00\x00\x00C\x00\x00\x00O\x00\x00\x00M\x00\x00\x00M\x00\x00\x00I\x00\x00\x00T\x00\x00\x00)\x00\x00\x00"
"(\x00\x00\x00*\x00\x00\x00P\x00\x00\x00R\x00\x00\x00U\x00\x00\x00N\x00\x00\x00E\x00\x00\x00)\x00\x00\x00"
"(\x00\x00\x00*\x00\x00\x00S\x00\x00\x00K\x00\x00\x00I\x00\x00\x00P\x00\x00\x00)\x00\x00\x00"
"(\x00\x00\x00*\x00\x00\x00T\x00\x00\x00H\x00\x00\x00E\x00\x00\x00N\x00\x00\x00)\x00\x00\x00"

# End
2 changes: 2 additions & 0 deletions pcre2_fuzzer_32.options
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
[libfuzzer]
dict = pcre2_fuzzer_32.dict
Loading