summaryrefslogtreecommitdiffstats
path: root/tests/fuzztest/SConscript
diff options
context:
space:
mode:
authorPetteri Aimonen <jpa@git.mail.kapsi.fi>2014-09-06 19:01:11 +0300
committerPetteri Aimonen <jpa@git.mail.kapsi.fi>2014-09-11 19:22:57 +0300
commit0dce9ef635f8af1b9aa07a43f610295bca8954da (patch)
treebb2227e0af820d692ccb5092115f8b64a6d71fbc /tests/fuzztest/SConscript
parent8189d538dd80a89bc6fa1672336b99c9c5cd076b (diff)
Add a better fuzz test.
Attempts to verify all the properties defined in the security model, while also being portable and able to run on many platforms.
Diffstat (limited to 'tests/fuzztest/SConscript')
-rw-r--r--tests/fuzztest/SConscript50
1 files changed, 50 insertions, 0 deletions
diff --git a/tests/fuzztest/SConscript b/tests/fuzztest/SConscript
new file mode 100644
index 00000000..36b62c56
--- /dev/null
+++ b/tests/fuzztest/SConscript
@@ -0,0 +1,50 @@
+# Run a fuzz test to verify robustness against corrupted/malicious data.
+
+Import("env")
+
+# We need our own pb_decode.o for the malloc support
+env = env.Clone()
+env.Append(CPPDEFINES = {'PB_ENABLE_MALLOC': 1,
+ 'PB_SYSTEM_HEADER': '\\"fuzz_syshdr.h\\"'})
+env.Append(CPPPATH = ".")
+
+if 'SYSHDR' in env:
+ env.Append(CPPDEFINES = {'PB_OLD_SYSHDR': env['SYSHDR']})
+
+# Disable libmudflap, because it will confuse valgrind
+# and other memory leak detection tools.
+if '-fmudflap' in env["CCFLAGS"]:
+ env["CCFLAGS"].remove("-fmudflap")
+ env["LINKFLAGS"].remove("-fmudflap")
+ env["LIBS"].remove("mudflap")
+
+strict = env.Clone()
+strict.Append(CFLAGS = strict['CORECFLAGS'])
+strict.Object("pb_decode_with_malloc.o", "$NANOPB/pb_decode.c")
+strict.Object("pb_encode_with_malloc.o", "$NANOPB/pb_encode.c")
+strict.Object("pb_common_with_malloc.o", "$NANOPB/pb_common.c")
+
+# We want both pointer and static versions of the AllTypes message
+env.Command("alltypes_static.proto", "#alltypes/alltypes.proto",
+ lambda target, source, env:
+ open(str(target[0]), 'w').write("package alltypes_static;\n"
+ + open(str(source[0])).read()))
+env.Command("alltypes_pointer.proto", "#alltypes/alltypes.proto",
+ lambda target, source, env:
+ open(str(target[0]), 'w').write("package alltypes_pointer;\n"
+ + open(str(source[0])).read()))
+
+p1 = env.NanopbProto(["alltypes_pointer", "alltypes_pointer.options"])
+p2 = env.NanopbProto(["alltypes_static", "alltypes_static.options"])
+fuzz = env.Program(["fuzztest.c",
+ "alltypes_pointer.pb.c",
+ "alltypes_static.pb.c",
+ "pb_encode_with_malloc.o",
+ "pb_decode_with_malloc.o",
+ "pb_common_with_malloc.o",
+ "malloc_wrappers.c"])
+Depends([p1, p2, fuzz], ["fuzz_syshdr.h", "malloc_wrappers.h"])
+
+env.RunTest(fuzz)
+
+