@@ -493,6 +493,7 @@ TESTSRC += \
493493 $(TOP ) /ext/misc/percentile.c \
494494 $(TOP ) /ext/misc/prefixes.c \
495495 $(TOP ) /ext/misc/qpvtab.c \
496+ $(TOP ) /ext/misc/randomjson.c \
496497 $(TOP ) /ext/misc/regexp.c \
497498 $(TOP ) /ext/misc/remember.c \
498499 $(TOP ) /ext/misc/series.c \
@@ -649,6 +650,7 @@ SHELL_OPT += -DSQLITE_ENABLE_DBPAGE_VTAB
649650SHELL_OPT += -DSQLITE_ENABLE_DBSTAT_VTAB
650651SHELL_OPT += -DSQLITE_ENABLE_BYTECODE_VTAB
651652SHELL_OPT += -DSQLITE_ENABLE_OFFSET_SQL_FUNC
653+ SHELL_OPT += -DSQLITE_STRICT_SUBTYPE=1
652654FUZZERSHELL_OPT =
653655FUZZCHECK_OPT += -I$(TOP ) /test
654656FUZZCHECK_OPT += -I$(TOP ) /ext/recover
@@ -679,14 +681,17 @@ FUZZCHECK_OPT += \
679681 -DSQLITE_MAX_MMAP_SIZE=0 \
680682 -DSQLITE_OMIT_LOAD_EXTENSION \
681683 -DSQLITE_PRINTF_PRECISION_LIMIT=1000 \
682- -DSQLITE_PRIVATE=""
684+ -DSQLITE_PRIVATE="" \
685+ -DSQLITE_STRICT_SUBTYPE=1 \
686+ -DSQLITE_STATIC_RANDOMJSON
683687
684688FUZZCHECK_SRC += $(TOP ) /test/fuzzcheck.c
685689FUZZCHECK_SRC += $(TOP ) /test/ossfuzz.c
686690FUZZCHECK_SRC += $(TOP ) /test/fuzzinvariants.c
687691FUZZCHECK_SRC += $(TOP ) /ext/recover/dbdata.c
688692FUZZCHECK_SRC += $(TOP ) /ext/recover/sqlite3recover.c
689693FUZZCHECK_SRC += $(TOP ) /test/vt02.c
694+ FUZZCHECK_SRC += $(TOP ) /ext/misc/randomjson.c
690695DBFUZZ_OPT =
691696ST_OPT = -DSQLITE_OS_KV_OPTIONAL
692697
@@ -769,6 +774,21 @@ fuzzcheck-asan$(TEXE): $(FUZZCHECK_SRC) sqlite3.c sqlite3.h $(FUZZCHECK_DEP)
769774fuzzcheck-ubsan$(TEXE ) : $(FUZZCHECK_SRC ) sqlite3.c sqlite3.h $(FUZZCHECK_DEP )
770775 $(LTLINK ) -o $@ -fsanitize=undefined $(FUZZCHECK_OPT ) $(FUZZCHECK_SRC ) sqlite3.c $(TLIBS )
771776
777+ # Usage: FUZZDB=filename make run-fuzzcheck
778+ #
779+ # Where filename is a fuzzcheck database, this target builds and runs
780+ # fuzzcheck, fuzzcheck-asan, and fuzzcheck-ubsan on that database.
781+ #
782+ # FUZZDB can be a glob pattern of two or more databases. Example:
783+ #
784+ # FUZZDB=test/fuzzdata*.db make run-fuzzcheck
785+ #
786+ run-fuzzcheck : fuzzcheck$(TEXE ) fuzzcheck-asan$(TEXE ) fuzzcheck-ubsan$(TEXE )
787+ @if test " $( FUZZDB) " = " " ; then echo ' ERROR: No FUZZDB specified. Rerun with FUZZDB=filename' ; exit 1; fi
788+ ./fuzzcheck$(TEXE ) --spinner $(FUZZDB )
789+ ./fuzzcheck-asan$(TEXE ) --spinner $(FUZZDB )
790+ ./fuzzcheck-ubsan$(TEXE ) --spinner $(FUZZDB )
791+
772792ossshell$(TEXE ) : $(TOP ) /test/ossfuzz.c $(TOP ) /test/ossshell.c sqlite3.c sqlite3.h
773793 $(LTLINK ) -o $@ $(FUZZCHECK_OPT ) $(TOP ) /test/ossshell.c \
774794 $(TOP)/test/ossfuzz.c sqlite3.c $(TLIBS) $(OPT_STATIC_LIBLIBSQL_WASM)
@@ -1223,19 +1243,21 @@ keywordhash.h: $(TOP)/tool/mkkeywordhash.c
12231243# Source files that go into making shell.c
12241244SHELL_SRC = \
12251245 $(TOP ) /src/shell.c.in \
1226- $(TOP ) /ext/misc/appendvfs.c \
1246+ $(TOP ) /ext/consio/console_io.c \
1247+ $(TOP ) /ext/consio/console_io.h \
1248+ $(TOP ) /ext/misc/appendvfs.c \
12271249 $(TOP ) /ext/misc/completion.c \
1228- $(TOP ) /ext/misc/decimal.c \
1229- $(TOP ) /ext/misc/basexx.c \
1230- $(TOP ) /ext/misc/base64.c \
1231- $(TOP ) /ext/misc/base85.c \
1250+ $(TOP ) /ext/misc/decimal.c \
1251+ $(TOP ) /ext/misc/basexx.c \
1252+ $(TOP ) /ext/misc/base64.c \
1253+ $(TOP ) /ext/misc/base85.c \
12321254 $(TOP ) /ext/misc/fileio.c \
1233- $(TOP ) /ext/misc/ieee754.c \
1234- $(TOP ) /ext/misc/regexp.c \
1235- $(TOP ) /ext/misc/series.c \
1255+ $(TOP ) /ext/misc/ieee754.c \
1256+ $(TOP ) /ext/misc/regexp.c \
1257+ $(TOP ) /ext/misc/series.c \
12361258 $(TOP ) /ext/misc/shathree.c \
12371259 $(TOP ) /ext/misc/sqlar.c \
1238- $(TOP ) /ext/misc/uint.c \
1260+ $(TOP ) /ext/misc/uint.c \
12391261 $(TOP ) /ext/expert/sqlite3expert.c \
12401262 $(TOP ) /ext/expert/sqlite3expert.h \
12411263 $(TOP ) /ext/misc/zipfile.c \
@@ -1244,7 +1266,7 @@ SHELL_SRC = \
12441266 $(TOP ) /ext/recover/dbdata.c \
12451267 $(TOP ) /ext/recover/sqlite3recover.c \
12461268 $(TOP ) /ext/recover/sqlite3recover.h \
1247- $(TOP ) /src/test_windirent.c
1269+ $(TOP ) /src/test_windirent.c
12481270
12491271shell.c : $(SHELL_SRC ) $(TOP ) /tool/mkshellc.tcl has_tclsh84
12501272 $(TCLSH_CMD ) $(TOP ) /tool/mkshellc.tcl > shell.c
@@ -1365,6 +1387,8 @@ TESTFIXTURE_FLAGS += -DSQLITE_ENABLE_STMTVTAB
13651387TESTFIXTURE_FLAGS += -DSQLITE_ENABLE_DBPAGE_VTAB
13661388TESTFIXTURE_FLAGS += -DSQLITE_ENABLE_BYTECODE_VTAB
13671389TESTFIXTURE_FLAGS += -DSQLITE_CKSUMVFS_STATIC
1390+ TESTFIXTURE_FLAGS += -DSQLITE_STATIC_RANDOMJSON
1391+ TESTFIXTURE_FLAGS += -DSQLITE_STRICT_SUBTYPE=1
13681392
13691393TESTFIXTURE_SRC0 = $(TESTSRC2 ) libsqlite3.la
13701394TESTFIXTURE_SRC1 = sqlite3.c
0 commit comments