xref: /aosp_15_r20/external/nanopb-c/tests/fuzztest/SConscript (revision c8d645cafcee3f91213d30caa0fe303887010b9b)
1*c8d645caSAndroid Build Coastguard Worker# Run a fuzz test to verify robustness against corrupted/malicious data.
2*c8d645caSAndroid Build Coastguard Worker
3*c8d645caSAndroid Build Coastguard WorkerImport("env", "malloc_env")
4*c8d645caSAndroid Build Coastguard Worker
5*c8d645caSAndroid Build Coastguard Workerdef set_pkgname(src, dst, pkgname):
6*c8d645caSAndroid Build Coastguard Worker    data = open(str(src)).read()
7*c8d645caSAndroid Build Coastguard Worker    placeholder = '// package name placeholder'
8*c8d645caSAndroid Build Coastguard Worker    assert placeholder in data
9*c8d645caSAndroid Build Coastguard Worker    data = data.replace(placeholder, 'package %s;' % pkgname)
10*c8d645caSAndroid Build Coastguard Worker    open(str(dst), 'w').write(data)
11*c8d645caSAndroid Build Coastguard Worker
12*c8d645caSAndroid Build Coastguard Worker# We want both pointer and static versions of the AllTypes message
13*c8d645caSAndroid Build Coastguard Worker# Prefix them with package name.
14*c8d645caSAndroid Build Coastguard Workerenv.Command("alltypes_static.proto", "#alltypes/alltypes.proto",
15*c8d645caSAndroid Build Coastguard Worker            lambda target, source, env: set_pkgname(source[0], target[0], 'alltypes_static'))
16*c8d645caSAndroid Build Coastguard Workerenv.Command("alltypes_pointer.proto", "#alltypes/alltypes.proto",
17*c8d645caSAndroid Build Coastguard Worker            lambda target, source, env: set_pkgname(source[0], target[0], 'alltypes_pointer'))
18*c8d645caSAndroid Build Coastguard Worker
19*c8d645caSAndroid Build Coastguard Workerp1 = env.NanopbProto(["alltypes_pointer", "alltypes_pointer.options"])
20*c8d645caSAndroid Build Coastguard Workerp2 = env.NanopbProto(["alltypes_static", "alltypes_static.options"])
21*c8d645caSAndroid Build Coastguard Workerfuzz = malloc_env.Program(["fuzztest.c",
22*c8d645caSAndroid Build Coastguard Worker                    "alltypes_pointer.pb.c",
23*c8d645caSAndroid Build Coastguard Worker                    "alltypes_static.pb.c",
24*c8d645caSAndroid Build Coastguard Worker                    "$COMMON/pb_encode_with_malloc.o",
25*c8d645caSAndroid Build Coastguard Worker                    "$COMMON/pb_decode_with_malloc.o",
26*c8d645caSAndroid Build Coastguard Worker                    "$COMMON/pb_common_with_malloc.o",
27*c8d645caSAndroid Build Coastguard Worker                    "$COMMON/malloc_wrappers.o"])
28*c8d645caSAndroid Build Coastguard Worker
29*c8d645caSAndroid Build Coastguard Workerenv.RunTest(fuzz)
30*c8d645caSAndroid Build Coastguard Worker
31*c8d645caSAndroid Build Coastguard Workerfuzzstub = malloc_env.Program(["fuzzstub.c",
32*c8d645caSAndroid Build Coastguard Worker                    "alltypes_pointer.pb.c",
33*c8d645caSAndroid Build Coastguard Worker                    "alltypes_static.pb.c",
34*c8d645caSAndroid Build Coastguard Worker                    "$COMMON/pb_encode_with_malloc.o",
35*c8d645caSAndroid Build Coastguard Worker                    "$COMMON/pb_decode_with_malloc.o",
36*c8d645caSAndroid Build Coastguard Worker                    "$COMMON/pb_common_with_malloc.o",
37*c8d645caSAndroid Build Coastguard Worker                    "$COMMON/malloc_wrappers.o"])
38*c8d645caSAndroid Build Coastguard Worker
39*c8d645caSAndroid Build Coastguard Workergenerate_message = malloc_env.Program(["generate_message.c",
40*c8d645caSAndroid Build Coastguard Worker                    "alltypes_static.pb.c",
41*c8d645caSAndroid Build Coastguard Worker                    "$COMMON/pb_encode.o",
42*c8d645caSAndroid Build Coastguard Worker                    "$COMMON/pb_common.o"])
43*c8d645caSAndroid Build Coastguard Worker
44