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