From 9bc2a20f0fab0b8d14fa6232f1b24f6130b1be0b Mon Sep 17 00:00:00 2001 From: Timur Safin <tsafin@tarantool.org> Date: Wed, 15 Jun 2022 22:28:25 +0300 Subject: [PATCH] datetime: fuzzer for messagepuck decoder Introduced fuzzing testing for datetime decoder. NO_DOC=internal NO_CHANGELOG=internal --- test/fuzz/CMakeLists.txt | 4 ++++ test/fuzz/mp_datetime_fuzzer.c | 20 ++++++++++++++++++ .../47f16d4100735c9838850fdd1265d94949389e9b | 1 + .../5c2dd944dde9e08881bef0894fe7b22a5c9c4b06 | 1 + .../889c6a675df321355334e553ff014b259ba63cf3 | 1 + .../9cf01ec061474c276771066b895908ca1a3f1f4c | Bin 0 -> 9 bytes .../a519eb8cf59243ef595da49a31968f133ca4d5ea | Bin 0 -> 16 bytes .../adcd8f16e2e6e64387e703a18891eb9586e94732 | Bin 0 -> 8 bytes .../b19adcd4c22e80929d79897c890be30bcda1c2e0 | Bin 0 -> 16 bytes .../b99a256478fc83e7c439db2385083877fece8c54 | 1 + .../c50aeff40966933e9a26a29a00491be98ffcae55 | Bin 0 -> 16 bytes .../ebb3409f065c25c28836de278829e402ce817a74 | Bin 0 -> 8 bytes .../ed04da522d2fd452418db009d545ccaf9fad18ea | Bin 0 -> 8 bytes 13 files changed, 28 insertions(+) create mode 100644 test/fuzz/mp_datetime_fuzzer.c create mode 100644 test/static/corpus/mp_datetime/47f16d4100735c9838850fdd1265d94949389e9b create mode 100644 test/static/corpus/mp_datetime/5c2dd944dde9e08881bef0894fe7b22a5c9c4b06 create mode 100644 test/static/corpus/mp_datetime/889c6a675df321355334e553ff014b259ba63cf3 create mode 100644 test/static/corpus/mp_datetime/9cf01ec061474c276771066b895908ca1a3f1f4c create mode 100644 test/static/corpus/mp_datetime/a519eb8cf59243ef595da49a31968f133ca4d5ea create mode 100644 test/static/corpus/mp_datetime/adcd8f16e2e6e64387e703a18891eb9586e94732 create mode 100644 test/static/corpus/mp_datetime/b19adcd4c22e80929d79897c890be30bcda1c2e0 create mode 100644 test/static/corpus/mp_datetime/b99a256478fc83e7c439db2385083877fece8c54 create mode 100644 test/static/corpus/mp_datetime/c50aeff40966933e9a26a29a00491be98ffcae55 create mode 100644 test/static/corpus/mp_datetime/ebb3409f065c25c28836de278829e402ce817a74 create mode 100644 test/static/corpus/mp_datetime/ed04da522d2fd452418db009d545ccaf9fad18ea diff --git a/test/fuzz/CMakeLists.txt b/test/fuzz/CMakeLists.txt index 1900d669ce..90eccf8965 100644 --- a/test/fuzz/CMakeLists.txt +++ b/test/fuzz/CMakeLists.txt @@ -50,10 +50,14 @@ target_link_libraries(datetime_parse_full_fuzzer PUBLIC core fuzzer_config) add_executable(datetime_strptime_fuzzer datetime_strptime_fuzzer.c) target_link_libraries(datetime_strptime_fuzzer PUBLIC core fuzzer_config) +add_executable(mp_datetime_fuzzer mp_datetime_fuzzer.c) +target_link_libraries(mp_datetime_fuzzer PUBLIC core fuzzer_config) + set(fuzzing_binaries csv_fuzzer datetime_parse_full_fuzzer datetime_strptime_fuzzer http_parser_fuzzer + mp_datetime_fuzzer swim_proto_member_fuzzer swim_proto_meta_fuzzer uri_fuzzer) diff --git a/test/fuzz/mp_datetime_fuzzer.c b/test/fuzz/mp_datetime_fuzzer.c new file mode 100644 index 0000000000..addb31d6b9 --- /dev/null +++ b/test/fuzz/mp_datetime_fuzzer.c @@ -0,0 +1,20 @@ +#include <stdint.h> +#include <stdlib.h> +#include <string.h> +#include "msgpuck.h" +#include "mp_extension_types.h" +#include "mp_datetime.h" + +int +LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) +{ + struct datetime ret; + memset(&ret, 0, sizeof(ret)); + if (datetime_unpack((const char **)&data, size, &ret) == NULL) + return 0; + assert(datetime_validate(&ret)); + return 0; +} + +void +cord_on_yield(void) {} diff --git a/test/static/corpus/mp_datetime/47f16d4100735c9838850fdd1265d94949389e9b b/test/static/corpus/mp_datetime/47f16d4100735c9838850fdd1265d94949389e9b new file mode 100644 index 0000000000..8bef4f8e18 --- /dev/null +++ b/test/static/corpus/mp_datetime/47f16d4100735c9838850fdd1265d94949389e9b @@ -0,0 +1 @@ +jjмяяяя•мяЕoЕЕ \ No newline at end of file diff --git a/test/static/corpus/mp_datetime/5c2dd944dde9e08881bef0894fe7b22a5c9c4b06 b/test/static/corpus/mp_datetime/5c2dd944dde9e08881bef0894fe7b22a5c9c4b06 new file mode 100644 index 0000000000..0fe2fa50e8 --- /dev/null +++ b/test/static/corpus/mp_datetime/5c2dd944dde9e08881bef0894fe7b22a5c9c4b06 @@ -0,0 +1 @@ +j \ No newline at end of file diff --git a/test/static/corpus/mp_datetime/889c6a675df321355334e553ff014b259ba63cf3 b/test/static/corpus/mp_datetime/889c6a675df321355334e553ff014b259ba63cf3 new file mode 100644 index 0000000000..3b27ddb9d0 --- /dev/null +++ b/test/static/corpus/mp_datetime/889c6a675df321355334e553ff014b259ba63cf3 @@ -0,0 +1 @@ +jjмяяямЕяo•яЕЕ \ No newline at end of file diff --git a/test/static/corpus/mp_datetime/9cf01ec061474c276771066b895908ca1a3f1f4c b/test/static/corpus/mp_datetime/9cf01ec061474c276771066b895908ca1a3f1f4c new file mode 100644 index 0000000000000000000000000000000000000000..4f16adb2cbeef5876f73eac74a7a871a9d1dfef3 GIT binary patch literal 9 OcmX?_&j18R85jTzy#e|F literal 0 HcmV?d00001 diff --git a/test/static/corpus/mp_datetime/a519eb8cf59243ef595da49a31968f133ca4d5ea b/test/static/corpus/mp_datetime/a519eb8cf59243ef595da49a31968f133ca4d5ea new file mode 100644 index 0000000000000000000000000000000000000000..1a579c8b0b4da81da55478a7308e3a578df008b0 GIT binary patch literal 16 Xcmd1eHsoSpWME+6=3-ztntv1k4+{do literal 0 HcmV?d00001 diff --git a/test/static/corpus/mp_datetime/adcd8f16e2e6e64387e703a18891eb9586e94732 b/test/static/corpus/mp_datetime/adcd8f16e2e6e64387e703a18891eb9586e94732 new file mode 100644 index 0000000000000000000000000000000000000000..444dd7ab2411c579851f81b3b0f88ed3f15d51c9 GIT binary patch literal 8 Pcmd1e=3-ztntv1k2h#$1 literal 0 HcmV?d00001 diff --git a/test/static/corpus/mp_datetime/b19adcd4c22e80929d79897c890be30bcda1c2e0 b/test/static/corpus/mp_datetime/b19adcd4c22e80929d79897c890be30bcda1c2e0 new file mode 100644 index 0000000000000000000000000000000000000000..db3249716795276b90ae69d48320126eae0ec334 GIT binary patch literal 16 Tcmd1eHe>(+ZXgz5FysON3kLxG literal 0 HcmV?d00001 diff --git a/test/static/corpus/mp_datetime/b99a256478fc83e7c439db2385083877fece8c54 b/test/static/corpus/mp_datetime/b99a256478fc83e7c439db2385083877fece8c54 new file mode 100644 index 0000000000..1e46f4bf97 --- /dev/null +++ b/test/static/corpus/mp_datetime/b99a256478fc83e7c439db2385083877fece8c54 @@ -0,0 +1 @@ +*jмяяямя•ЕoЕЕ \ No newline at end of file diff --git a/test/static/corpus/mp_datetime/c50aeff40966933e9a26a29a00491be98ffcae55 b/test/static/corpus/mp_datetime/c50aeff40966933e9a26a29a00491be98ffcae55 new file mode 100644 index 0000000000000000000000000000000000000000..ed8f35dca226b2de780a73c9926ad6bfb518268d GIT binary patch literal 16 Rcmd1eW`F`N28JwdE&vGc0RI30 literal 0 HcmV?d00001 diff --git a/test/static/corpus/mp_datetime/ebb3409f065c25c28836de278829e402ce817a74 b/test/static/corpus/mp_datetime/ebb3409f065c25c28836de278829e402ce817a74 new file mode 100644 index 0000000000000000000000000000000000000000..3f3f9f82d8a14af55d395d204b596e369e5b06ff GIT binary patch literal 8 PcmZQzU|=|!f0PRV1^og9 literal 0 HcmV?d00001 diff --git a/test/static/corpus/mp_datetime/ed04da522d2fd452418db009d545ccaf9fad18ea b/test/static/corpus/mp_datetime/ed04da522d2fd452418db009d545ccaf9fad18ea new file mode 100644 index 0000000000000000000000000000000000000000..2dadce74dd334aeea86b9090c0d0a41a8dc63477 GIT binary patch literal 8 NcmZQzU|={3!~g>v0LB0S literal 0 HcmV?d00001 -- GitLab