# regress/Makefile[.in] - regression test Makefile
#
-# This file is part of adns, which is
-# Copyright (C) 1997-2000,2003,2006,2014-2016,2020 Ian Jackson
-# Copyright (C) 2014 Mark Wooding
-# Copyright (C) 1999-2000,2003,2006 Tony Finch
-# Copyright (C) 1991 Massachusetts Institute of Technology
-# (See the file INSTALL for full details.)
+# This file is part of adns, which is Copyright Ian Jackson
+# and contributors (see the file INSTALL for full details).
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
CLIENTS= adnstest adnshost adnslogres $(PROGS_SYSDEP)
AUTOCHDRS= harness.h hsyscalls.h hredirect.h
-AUTOCSRCS= hrecord.c hplayback.c hcommon.c
+AUTOCSRCS= hrecord.c hplayback.c hcommon.c hfuzzraw.c
include ../settings.make
include $(srcdir)/../src/adns.make
DIRCFLAGS= -I../src -I$(srcdir) -I$(srcdir)/../src
HCPPFLAGS= -DADNS_REGRESS_TEST -I.
+#HCPPFLAGS+= -DFUZZRAW_SYNC
REDIRLIBOBJS= $(addsuffix _d.o, $(basename $(LIBOBJS)))
HARNLOBJS= hcommon.o $(REDIRLIBOBJS)
TARGETS= $(addsuffix _record, $(CLIENTS)) \
$(addsuffix _playback, $(CLIENTS)) \
- $(addsuffix _fuzz, $(CLIENTS))
+ $(addsuffix _fuzz, $(CLIENTS)) \
+ $(addsuffix _fuzzraw, $(CLIENTS))
ADH_OBJS= adh-main_c.o adh-opts_c.o adh-query_c.o
ALL_OBJS= $(HARNLOBJS) dtest.o hrecord.o hplayback.o hnonfuzz.o hfuzz.o
@echo
@echo 'all tests passed or maybe skipped.'
-checkfuzz: $(TARGETS) $(addprefix checkfuzz-,$(ALL_TESTS))
+checkfuzz: $(TARGETS) \
+ $(addprefix checkfuzz-,$(ALL_TESTS)) \
+ $(addprefix checkfuzzraw-,$(ALL_TESTS))
@echo
@echo 'all fuzzes passed or maybe skipped.'
# this target is mostly useful as prep work for running the fuzzer;
# it doesn't really test any of adns
+fuzzcat.d: checkfuzz
+ $(srcdir)/categorisefuzz $(ALL_TESTS)
+ perl -ne 'print $$1,"\n" while m/\"([^"% ]{2,})\"/g' \
+ $(srcdir)/../src/*.[ch] $(srcdir)/../client/*.[ch] \
+ | sort -u >fuzzcat.d/dictionary
+ perl -p -e 'chomp;' \
+ -e 's/[^0-9a-z-_]/sprintf "\\x%02x", ord $$&/ige;' \
+ -e 's/^/l$$.="/; ' \
+ -e 's/$$/"\n/;' \
+ fuzzcat.d/dictionary >fuzzcat.d/dictionary.afl
+
check-%: case-%.sys
@srcdir=$(srcdir) $(srcdir)/r1test $* || test $$? = 5
fuzz-%: case-%.sys $(TARGETS) make1fuzz shlib
srcdir=$(srcdir) $(srcdir)/make1fuzz $*
+fuzzraw-%: fuzz-%
+
.PRECIOUS: fuzz-%
checkfuzz-%: fuzz-% $(TARGETS)
- @srcdir=$(srcdir) $(srcdir)/check1fuzz $< || test $$? = 5
+ @srcdir=$(srcdir) $(srcdir)/check1fuzz $<
+
+checkfuzzraw-%: fuzz-% $(TARGETS)
+ @srcdir=$(srcdir) $(srcdir)/check1fuzz $<
LINK_CMD= $(CC) $(LDFLAGS) $^ $(LDLIBS) -o $@
%_fuzz: %_c.o hplayback.o hfuzz.o $(HARNLOBJS)
$(LINK_CMD)
+%_fuzzraw: %_c.o hfuzzraw.o hfuzz.o $(HARNLOBJS)
+ $(LINK_CMD)
+
.SECONDARY: $(addsuffix _c.o, $(filter-out adnshost, $(CLIENTS)))
# Without this, make will remove <client>_c.o after building <client>.
# This wastes effort. (Debian bug #4073.)
adnshost_fuzz: $(ADH_OBJS) hplayback.o hfuzz.o $(HARNLOBJS)
$(LINK_CMD)
-%_d.o: $(srcdir)/../src/%.c hredirect.h
+adnshost_fuzzraw: $(ADH_OBJS) hfuzzraw.o hfuzz.o $(HARNLOBJS)
+ $(LINK_CMD)
+
+%_d.o: $(srcdir)/../src/%.c hredirect.h hsyscalls.h
$(CC) $(CFLAGS) $(HCPPFLAGS) -c -g -o $@ $<
-%_c.o: $(srcdir)/../client/%.c hredirect.h
+%_c.o: $(srcdir)/../client/%.c hredirect.h hsyscalls.h
$(CC) $(CFLAGS) $(HCPPFLAGS) -I $(srcdir)/../src -c -g -o $@ $<
$(ALL_OBJS): $(srcdir)/../src/adns.h $(srcdir)/../src/internal.h