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