diff options
144 files changed, 564 insertions, 78 deletions
diff --git a/.github/workflows/cifuzz.yml b/.github/workflows/cifuzz.yml index 2285fad3d..da5cbff15 100644 --- a/.github/workflows/cifuzz.yml +++ b/.github/workflows/cifuzz.yml @@ -18,7 +18,7 @@ jobs: uses: google/oss-fuzz/infra/cifuzz/actions/run_fuzzers@master with: oss-fuzz-project-name: 'ndpi' - fuzz-seconds: 1500 + fuzz-seconds: 1600 dry-run: false sanitizer: ${{ matrix.sanitizer }} - name: Check Crash (fails when a crash is detected) diff --git a/.gitignore b/.gitignore index 8b6b9efd7..e6e177083 100644 --- a/.gitignore +++ b/.gitignore @@ -61,6 +61,7 @@ /fuzz/fuzz_alg_ses_des /fuzz/fuzz_config /fuzz/fuzz_community_id +/fuzz/fuzz_serialization /fuzz/fuzz_ds_patricia /fuzz/fuzz_ds_libcache /fuzz/fuzz_ds_tree @@ -70,6 +71,7 @@ /fuzz/fuzz_quic_get_crypto_data_seed_corpus.zip /fuzz/fuzz_config_seed_corpus.zip /fuzz/fuzz_community_id_seed_corpus.zip +/fuzz/fuzz_serialization_seed_corpus.zip /fuzz/fuzz_alg_ses_des_seed_corpus.zip /fuzz/fuzz_alg_bins_seed_corpus.zip /fuzz/fuzz_alg_hll_seed_corpus.zip diff --git a/fuzz/Makefile.am b/fuzz/Makefile.am index c16d083a6..4729a3eec 100644 --- a/fuzz/Makefile.am +++ b/fuzz/Makefile.am @@ -1,4 +1,4 @@ -bin_PROGRAMS = fuzz_process_packet fuzz_ndpi_reader fuzz_ndpi_reader_alloc_fail fuzz_quic_get_crypto_data fuzz_config fuzz_community_id +bin_PROGRAMS = fuzz_process_packet fuzz_ndpi_reader fuzz_ndpi_reader_alloc_fail fuzz_quic_get_crypto_data fuzz_config fuzz_community_id fuzz_serialization #Alghoritms bin_PROGRAMS += fuzz_alg_bins fuzz_alg_hll fuzz_alg_hw_rsi_outliers_da fuzz_alg_jitter fuzz_alg_ses_des #Data structures @@ -86,6 +86,21 @@ fuzz_community_id_LINK=$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXX) @NDPI_CFLAGS@ $(AM_CXXFLAGS) $(CXXFLAGS) \ $(fuzz_community_id_LDFLAGS) @NDPI_LDFLAGS@ $(LDFLAGS) -o $@ +fuzz_serialization_SOURCES = fuzz_serialization.cpp fuzz_common_code.c +fuzz_serialization_CXXFLAGS = @NDPI_CFLAGS@ $(CXXFLAGS) -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION +fuzz_serialization_CFLAGS = @NDPI_CFLAGS@ $(CXXFLAGS) -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION +fuzz_serialization_LDADD = ../src/lib/libndpi.a $(ADDITIONAL_LIBS) +fuzz_serialization_LDFLAGS = $(LIBS) +if HAS_FUZZLDFLAGS +fuzz_serialization_CXXFLAGS += $(LIB_FUZZING_ENGINE) +fuzz_serialization_CFLAGS += $(LIB_FUZZING_ENGINE) +fuzz_serialization_LDFLAGS += $(LIB_FUZZING_ENGINE) +endif +# force usage of CXX for linker +fuzz_serialization_LINK=$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXX) @NDPI_CFLAGS@ $(AM_CXXFLAGS) $(CXXFLAGS) \ + $(fuzz_serialization_LDFLAGS) @NDPI_LDFLAGS@ $(LDFLAGS) -o $@ + fuzz_alg_bins_SOURCES = fuzz_alg_bins.cpp fuzz_common_code.c fuzz_alg_bins_CXXFLAGS = @NDPI_CFLAGS@ $(CXXFLAGS) -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION fuzz_alg_bins_CFLAGS = @NDPI_CFLAGS@ $(CXXFLAGS) -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION @@ -242,6 +257,11 @@ files_corpus_fuzz_config := $(wildcard corpus/fuzz_config/*) fuzz_config_seed_corpus.zip: $(files_corpus_fuzz_config) zip -j fuzz_config_seed_corpus.zip $(files_corpus_fuzz_config) +files_corpus_fuzz_serialization := $(wildcard corpus/fuzz_serialization/*) + +fuzz_serialization_seed_corpus.zip: $(files_corpus_fuzz_serialization) + zip -j fuzz_serialization_seed_corpus.zip $(files_corpus_fuzz_serialization) + files_corpus_fuzz_community_id := $(wildcard corpus/fuzz_community_id/*) fuzz_community_id_seed_corpus.zip: $(files_corpus_fuzz_community_id) @@ -292,7 +312,7 @@ files_corpus_fuzz_ds_tree := $(wildcard corpus/fuzz_ds_tree/*) fuzz_ds_tree_seed_corpus.zip: $(files_corpus_fuzz_ds_tree) zip -j fuzz_ds_tree_seed_corpus.zip $(files_corpus_fuzz_ds_tree) -corpus: fuzz_ndpi_reader_seed_corpus.zip fuzz_ndpi_reader_alloc_fail_seed_corpus.zip fuzz_quic_get_crypto_data_seed_corpus.zip fuzz_config_seed_corpus.zip fuzz_ds_patricia_seed_corpus.zip fuzz_ds_ahocorasick_seed_corpus.zip fuzz_alg_ses_des_seed_corpus.zip fuzz_alg_hw_rsi_outliers_da_seed_corpus.zip fuzz_alg_bins_seed_corpus.zip fuzz_alg_hll_seed_corpus.zip fuzz_alg_jitter_seed_corpus.zip fuzz_ds_libcache_seed_corpus.zip fuzz_community_id_seed_corpus.zip fuzz_ds_tree_seed_corpus.zip +corpus: fuzz_ndpi_reader_seed_corpus.zip fuzz_ndpi_reader_alloc_fail_seed_corpus.zip fuzz_quic_get_crypto_data_seed_corpus.zip fuzz_config_seed_corpus.zip fuzz_ds_patricia_seed_corpus.zip fuzz_ds_ahocorasick_seed_corpus.zip fuzz_alg_ses_des_seed_corpus.zip fuzz_alg_hw_rsi_outliers_da_seed_corpus.zip fuzz_alg_bins_seed_corpus.zip fuzz_alg_hll_seed_corpus.zip fuzz_alg_jitter_seed_corpus.zip fuzz_ds_libcache_seed_corpus.zip fuzz_community_id_seed_corpus.zip fuzz_ds_tree_seed_corpus.zip fuzz_serialization_seed_corpus.zip #Create dictionaries exactly as expected by oss-fuzz. #This way, if we need to change/update/add something, @@ -311,6 +331,7 @@ distdir: -o -name '*.dict' \ -o -path './corpus/fuzz_quic_get_crypto_data/*' \ -o -path './corpus/fuzz_config/*' \ + -o -path './corpus/fuzz_serialization/*' \ -o -path './corpus/fuzz_community_id/*' \ -o -path './corpus/fuzz_alg_ses_des/*' \ -o -path './corpus/fuzz_alg_bins/*' \ diff --git a/fuzz/corpus/fuzz_serialization/0067200701e9b0b5ec3db13f387a75e9e82202b0 b/fuzz/corpus/fuzz_serialization/0067200701e9b0b5ec3db13f387a75e9e82202b0 Binary files differnew file mode 100644 index 000000000..b7ffcef42 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/0067200701e9b0b5ec3db13f387a75e9e82202b0 diff --git a/fuzz/corpus/fuzz_serialization/00ba573f9435b38d7205d995bbfe1813add81ab3 b/fuzz/corpus/fuzz_serialization/00ba573f9435b38d7205d995bbfe1813add81ab3 Binary files differnew file mode 100644 index 000000000..79d7380b1 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/00ba573f9435b38d7205d995bbfe1813add81ab3 diff --git a/fuzz/corpus/fuzz_serialization/0228f43998915b3c03c642cadacb0fc9f34ad80f b/fuzz/corpus/fuzz_serialization/0228f43998915b3c03c642cadacb0fc9f34ad80f new file mode 100644 index 000000000..44e6876e8 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/0228f43998915b3c03c642cadacb0fc9f34ad80f @@ -0,0 +1 @@ +R…0-
\ No newline at end of file diff --git a/fuzz/corpus/fuzz_serialization/03e684ba5d7a6306ddfb1dd15f40f2c4a1a074ee b/fuzz/corpus/fuzz_serialization/03e684ba5d7a6306ddfb1dd15f40f2c4a1a074ee Binary files differnew file mode 100644 index 000000000..d8d696468 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/03e684ba5d7a6306ddfb1dd15f40f2c4a1a074ee diff --git a/fuzz/corpus/fuzz_serialization/07d9e6281c5355f19da85e221fc562ec2d877e3b b/fuzz/corpus/fuzz_serialization/07d9e6281c5355f19da85e221fc562ec2d877e3b Binary files differnew file mode 100644 index 000000000..9fcd23466 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/07d9e6281c5355f19da85e221fc562ec2d877e3b diff --git a/fuzz/corpus/fuzz_serialization/07dda5cbda20802250efce051169313efcc19c91 b/fuzz/corpus/fuzz_serialization/07dda5cbda20802250efce051169313efcc19c91 Binary files differnew file mode 100644 index 000000000..897cb5955 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/07dda5cbda20802250efce051169313efcc19c91 diff --git a/fuzz/corpus/fuzz_serialization/0826de64028c8e890d2c9f95ee0ac3180ad45431 b/fuzz/corpus/fuzz_serialization/0826de64028c8e890d2c9f95ee0ac3180ad45431 Binary files differnew file mode 100644 index 000000000..6a5aa7fe9 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/0826de64028c8e890d2c9f95ee0ac3180ad45431 diff --git a/fuzz/corpus/fuzz_serialization/09251a8df7e23a0e332eb0beee7afdec7e48fc7d b/fuzz/corpus/fuzz_serialization/09251a8df7e23a0e332eb0beee7afdec7e48fc7d Binary files differnew file mode 100644 index 000000000..23ddd25cd --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/09251a8df7e23a0e332eb0beee7afdec7e48fc7d diff --git a/fuzz/corpus/fuzz_serialization/0cf7de690bf6e03f2843688fef7e5fa6f8f5b50a b/fuzz/corpus/fuzz_serialization/0cf7de690bf6e03f2843688fef7e5fa6f8f5b50a new file mode 100644 index 000000000..f6c543e2d --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/0cf7de690bf6e03f2843688fef7e5fa6f8f5b50a @@ -0,0 +1 @@ +0ô{Шp(ã'}œ„F
\ No newline at end of file diff --git a/fuzz/corpus/fuzz_serialization/0f6e2d10bdff7d0f0f6ce142c9fa4d2a22d39fdb b/fuzz/corpus/fuzz_serialization/0f6e2d10bdff7d0f0f6ce142c9fa4d2a22d39fdb new file mode 100644 index 000000000..d538b12c7 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/0f6e2d10bdff7d0f0f6ce142c9fa4d2a22d39fdb @@ -0,0 +1 @@ +Äðáþð
\ No newline at end of file diff --git a/fuzz/corpus/fuzz_serialization/1019a3c07fe32d6fab2e673671f557717d4997d7 b/fuzz/corpus/fuzz_serialization/1019a3c07fe32d6fab2e673671f557717d4997d7 Binary files differnew file mode 100644 index 000000000..9e9735fe0 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/1019a3c07fe32d6fab2e673671f557717d4997d7 diff --git a/fuzz/corpus/fuzz_serialization/102b9366042c4c2ada3408c1808bc8cae19199e6 b/fuzz/corpus/fuzz_serialization/102b9366042c4c2ada3408c1808bc8cae19199e6 Binary files differnew file mode 100644 index 000000000..44482bb8c --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/102b9366042c4c2ada3408c1808bc8cae19199e6 diff --git a/fuzz/corpus/fuzz_serialization/111bf62468546c168ac3da1052ec3bf12c51d927 b/fuzz/corpus/fuzz_serialization/111bf62468546c168ac3da1052ec3bf12c51d927 Binary files differnew file mode 100644 index 000000000..ffcd99b5e --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/111bf62468546c168ac3da1052ec3bf12c51d927 diff --git a/fuzz/corpus/fuzz_serialization/123959e688316f1156b5fd63115e66990691dab8 b/fuzz/corpus/fuzz_serialization/123959e688316f1156b5fd63115e66990691dab8 Binary files differnew file mode 100644 index 000000000..052e33956 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/123959e688316f1156b5fd63115e66990691dab8 diff --git a/fuzz/corpus/fuzz_serialization/1599e9fa41ec68c80230491902786bee889f5bcb b/fuzz/corpus/fuzz_serialization/1599e9fa41ec68c80230491902786bee889f5bcb new file mode 100644 index 000000000..92a39f398 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/1599e9fa41ec68c80230491902786bee889f5bcb @@ -0,0 +1 @@ +é
\ No newline at end of file diff --git a/fuzz/corpus/fuzz_serialization/1799f48cfbb2ab6b1110385ff98bb8c46313cdec b/fuzz/corpus/fuzz_serialization/1799f48cfbb2ab6b1110385ff98bb8c46313cdec Binary files differnew file mode 100644 index 000000000..d2469640c --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/1799f48cfbb2ab6b1110385ff98bb8c46313cdec diff --git a/fuzz/corpus/fuzz_serialization/1835e91fe48390e58af954a32fd7c76f31bd9589 b/fuzz/corpus/fuzz_serialization/1835e91fe48390e58af954a32fd7c76f31bd9589 Binary files differnew file mode 100644 index 000000000..e369ffa8f --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/1835e91fe48390e58af954a32fd7c76f31bd9589 diff --git a/fuzz/corpus/fuzz_serialization/1a8f29ec0d35809a410d5491f71238139e481538 b/fuzz/corpus/fuzz_serialization/1a8f29ec0d35809a410d5491f71238139e481538 Binary files differnew file mode 100644 index 000000000..c448c554c --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/1a8f29ec0d35809a410d5491f71238139e481538 diff --git a/fuzz/corpus/fuzz_serialization/1af6e9701b53c33f27e958848e077cc8663f2d49 b/fuzz/corpus/fuzz_serialization/1af6e9701b53c33f27e958848e077cc8663f2d49 Binary files differnew file mode 100644 index 000000000..55b2120cc --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/1af6e9701b53c33f27e958848e077cc8663f2d49 diff --git a/fuzz/corpus/fuzz_serialization/1b9853e05cb525c5e3f95cc351e6af1d93169e21 b/fuzz/corpus/fuzz_serialization/1b9853e05cb525c5e3f95cc351e6af1d93169e21 Binary files differnew file mode 100644 index 000000000..8674288b8 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/1b9853e05cb525c5e3f95cc351e6af1d93169e21 diff --git a/fuzz/corpus/fuzz_serialization/1c1f0a2fb6bce1b4efad57e900e1dea1884b31b5 b/fuzz/corpus/fuzz_serialization/1c1f0a2fb6bce1b4efad57e900e1dea1884b31b5 Binary files differnew file mode 100644 index 000000000..222a1b47e --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/1c1f0a2fb6bce1b4efad57e900e1dea1884b31b5 diff --git a/fuzz/corpus/fuzz_serialization/1d25ea7808bdc1960f4fa0b1265d348157676d34 b/fuzz/corpus/fuzz_serialization/1d25ea7808bdc1960f4fa0b1265d348157676d34 new file mode 100644 index 000000000..f1da386ba --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/1d25ea7808bdc1960f4fa0b1265d348157676d34 @@ -0,0 +1 @@ +„K!i @`¨1öÀ ¨GH we<ÑÝ7@¿|£™×:vä/à&mÇ}§9‹Õ‘©öîºp%Öô×Õ
\ No newline at end of file diff --git a/fuzz/corpus/fuzz_serialization/212f0b6f4f250553420c4b462b6adfbca29667e7 b/fuzz/corpus/fuzz_serialization/212f0b6f4f250553420c4b462b6adfbca29667e7 new file mode 100644 index 000000000..a899e25f5 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/212f0b6f4f250553420c4b462b6adfbca29667e7 @@ -0,0 +1 @@ +®0ÏÎÙ
\ No newline at end of file diff --git a/fuzz/corpus/fuzz_serialization/22180792385106ce0b6ce830e1ff76f431a01c9d b/fuzz/corpus/fuzz_serialization/22180792385106ce0b6ce830e1ff76f431a01c9d Binary files differnew file mode 100644 index 000000000..c93b14d53 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/22180792385106ce0b6ce830e1ff76f431a01c9d diff --git a/fuzz/corpus/fuzz_serialization/23d2435c588ac50944b11976815bf162f433e0ab b/fuzz/corpus/fuzz_serialization/23d2435c588ac50944b11976815bf162f433e0ab Binary files differnew file mode 100644 index 000000000..cc3f0f3cc --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/23d2435c588ac50944b11976815bf162f433e0ab diff --git a/fuzz/corpus/fuzz_serialization/25885772862548d55ad11ac6b1913a2b7a9f2513 b/fuzz/corpus/fuzz_serialization/25885772862548d55ad11ac6b1913a2b7a9f2513 Binary files differnew file mode 100644 index 000000000..fcac78825 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/25885772862548d55ad11ac6b1913a2b7a9f2513 diff --git a/fuzz/corpus/fuzz_serialization/2c16853a4cc039ea91f734590db769824ae54318 b/fuzz/corpus/fuzz_serialization/2c16853a4cc039ea91f734590db769824ae54318 Binary files differnew file mode 100644 index 000000000..cea7d5b12 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/2c16853a4cc039ea91f734590db769824ae54318 diff --git a/fuzz/corpus/fuzz_serialization/2f10304d880a3bceb43f89514ff7661474d818f9 b/fuzz/corpus/fuzz_serialization/2f10304d880a3bceb43f89514ff7661474d818f9 new file mode 100644 index 000000000..0120e0039 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/2f10304d880a3bceb43f89514ff7661474d818f9 @@ -0,0 +1,3 @@ +ƒ +ú}ppú} +í_çƒÁa‘†¬]C%
\ No newline at end of file diff --git a/fuzz/corpus/fuzz_serialization/30fba8556db34f5d467c0d677fe176564b377748 b/fuzz/corpus/fuzz_serialization/30fba8556db34f5d467c0d677fe176564b377748 Binary files differnew file mode 100644 index 000000000..c55e8f814 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/30fba8556db34f5d467c0d677fe176564b377748 diff --git a/fuzz/corpus/fuzz_serialization/33a78cbd4539e3757769bb950283c7f8a340f20d b/fuzz/corpus/fuzz_serialization/33a78cbd4539e3757769bb950283c7f8a340f20d Binary files differnew file mode 100644 index 000000000..d2ec36796 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/33a78cbd4539e3757769bb950283c7f8a340f20d diff --git a/fuzz/corpus/fuzz_serialization/36a23d77f4380edecd3ba002c371f2e9ebfe4fc2 b/fuzz/corpus/fuzz_serialization/36a23d77f4380edecd3ba002c371f2e9ebfe4fc2 Binary files differnew file mode 100644 index 000000000..004eecf58 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/36a23d77f4380edecd3ba002c371f2e9ebfe4fc2 diff --git a/fuzz/corpus/fuzz_serialization/38eba3bacca0984d08666561e863d816fae7bd79 b/fuzz/corpus/fuzz_serialization/38eba3bacca0984d08666561e863d816fae7bd79 Binary files differnew file mode 100644 index 000000000..f81f6b4ed --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/38eba3bacca0984d08666561e863d816fae7bd79 diff --git a/fuzz/corpus/fuzz_serialization/39a7293fe98a37dbd3bb56eafebff914df2e0835 b/fuzz/corpus/fuzz_serialization/39a7293fe98a37dbd3bb56eafebff914df2e0835 Binary files differnew file mode 100644 index 000000000..7678394cb --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/39a7293fe98a37dbd3bb56eafebff914df2e0835 diff --git a/fuzz/corpus/fuzz_serialization/3a474dedd7c902caa19c0aea83735fe5805b5ae5 b/fuzz/corpus/fuzz_serialization/3a474dedd7c902caa19c0aea83735fe5805b5ae5 Binary files differnew file mode 100644 index 000000000..57107923a --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/3a474dedd7c902caa19c0aea83735fe5805b5ae5 diff --git a/fuzz/corpus/fuzz_serialization/3c49269686ee0c250a2d977a86d965727418ebe0 b/fuzz/corpus/fuzz_serialization/3c49269686ee0c250a2d977a86d965727418ebe0 Binary files differnew file mode 100644 index 000000000..e222d01c3 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/3c49269686ee0c250a2d977a86d965727418ebe0 diff --git a/fuzz/corpus/fuzz_serialization/3ccc20957ca1de354f0911587f3f6a89bf639bbe b/fuzz/corpus/fuzz_serialization/3ccc20957ca1de354f0911587f3f6a89bf639bbe new file mode 100644 index 000000000..9e029da13 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/3ccc20957ca1de354f0911587f3f6a89bf639bbe @@ -0,0 +1 @@ +0ô{ëuLLLLLOLLLLLLLÿÿâ
\ No newline at end of file diff --git a/fuzz/corpus/fuzz_serialization/3eec95f5cdf41fd6200a215e24d60f3bede4fa18 b/fuzz/corpus/fuzz_serialization/3eec95f5cdf41fd6200a215e24d60f3bede4fa18 Binary files differnew file mode 100644 index 000000000..e0849ad36 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/3eec95f5cdf41fd6200a215e24d60f3bede4fa18 diff --git a/fuzz/corpus/fuzz_serialization/44613cadc2a119c0445d8aca742ddaa6e9d14f15 b/fuzz/corpus/fuzz_serialization/44613cadc2a119c0445d8aca742ddaa6e9d14f15 new file mode 100644 index 000000000..7272637c8 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/44613cadc2a119c0445d8aca742ddaa6e9d14f15 @@ -0,0 +1 @@ +}œ„–DŽ™ãƒÁa‘Ó¸tÂاóšP¨»Ù04
\ No newline at end of file diff --git a/fuzz/corpus/fuzz_serialization/44c16af83b7bfe485630ec7417a8a93dd6a4f344 b/fuzz/corpus/fuzz_serialization/44c16af83b7bfe485630ec7417a8a93dd6a4f344 Binary files differnew file mode 100644 index 000000000..0853d86aa --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/44c16af83b7bfe485630ec7417a8a93dd6a4f344 diff --git a/fuzz/corpus/fuzz_serialization/4599f42df4bd96e578ca04c9f530bce55f85c593 b/fuzz/corpus/fuzz_serialization/4599f42df4bd96e578ca04c9f530bce55f85c593 new file mode 100644 index 000000000..4c186bd89 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/4599f42df4bd96e578ca04c9f530bce55f85c593 @@ -0,0 +1 @@ +Ëcê
\ No newline at end of file diff --git a/fuzz/corpus/fuzz_serialization/46220eb9c32d8f39af7842340be4410bbc6b0acf b/fuzz/corpus/fuzz_serialization/46220eb9c32d8f39af7842340be4410bbc6b0acf new file mode 100644 index 000000000..9f3e7d8e5 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/46220eb9c32d8f39af7842340be4410bbc6b0acf @@ -0,0 +1 @@ +ƒÁa‘†¬D°
ç½ ¸ÿÿÿ«™=•;0izZXÙ™Ê6ªí_çŽÕþ>ýhœ{|4¶^iWœä Òñ€ãƒÁa‘†¬]D°C%
\ No newline at end of file diff --git a/fuzz/corpus/fuzz_serialization/47102208d3296068fd9d922e8794d5614bf673b4 b/fuzz/corpus/fuzz_serialization/47102208d3296068fd9d922e8794d5614bf673b4 new file mode 100644 index 000000000..acb6c7c6d --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/47102208d3296068fd9d922e8794d5614bf673b4 @@ -0,0 +1 @@ +ðáá
\ No newline at end of file diff --git a/fuzz/corpus/fuzz_serialization/485ffdac621c7a2fe64c49a9d43218c4297b0291 b/fuzz/corpus/fuzz_serialization/485ffdac621c7a2fe64c49a9d43218c4297b0291 Binary files differnew file mode 100644 index 000000000..0f84de054 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/485ffdac621c7a2fe64c49a9d43218c4297b0291 diff --git a/fuzz/corpus/fuzz_serialization/4a3ac753e86aee22a1fba2144d452def73f5d445 b/fuzz/corpus/fuzz_serialization/4a3ac753e86aee22a1fba2144d452def73f5d445 Binary files differnew file mode 100644 index 000000000..7106b6e26 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/4a3ac753e86aee22a1fba2144d452def73f5d445 diff --git a/fuzz/corpus/fuzz_serialization/4a4cc4a8eea5e60045f94339f31c6a70a6fd0b68 b/fuzz/corpus/fuzz_serialization/4a4cc4a8eea5e60045f94339f31c6a70a6fd0b68 Binary files differnew file mode 100644 index 000000000..890012598 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/4a4cc4a8eea5e60045f94339f31c6a70a6fd0b68 diff --git a/fuzz/corpus/fuzz_serialization/4c9b56fa31b381b7fb82fa698c6f3a756af8cc3c b/fuzz/corpus/fuzz_serialization/4c9b56fa31b381b7fb82fa698c6f3a756af8cc3c Binary files differnew file mode 100644 index 000000000..8762265c6 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/4c9b56fa31b381b7fb82fa698c6f3a756af8cc3c diff --git a/fuzz/corpus/fuzz_serialization/4d4eb9538c5dcf8eb485e7b1d25e476926375abb b/fuzz/corpus/fuzz_serialization/4d4eb9538c5dcf8eb485e7b1d25e476926375abb Binary files differnew file mode 100644 index 000000000..2bd2fc477 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/4d4eb9538c5dcf8eb485e7b1d25e476926375abb diff --git a/fuzz/corpus/fuzz_serialization/4e39c82f78d2c2109122e62d29a7e6b244d4e466 b/fuzz/corpus/fuzz_serialization/4e39c82f78d2c2109122e62d29a7e6b244d4e466 Binary files differnew file mode 100644 index 000000000..0351dbbf5 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/4e39c82f78d2c2109122e62d29a7e6b244d4e466 diff --git a/fuzz/corpus/fuzz_serialization/4f13e492e5330e2b0ac7cfd33bdb6f68e51da838 b/fuzz/corpus/fuzz_serialization/4f13e492e5330e2b0ac7cfd33bdb6f68e51da838 new file mode 100644 index 000000000..aab6048a0 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/4f13e492e5330e2b0ac7cfd33bdb6f68e51da838 @@ -0,0 +1 @@ +}™†ª…„D–u6ÔRþÿ›«Ç].…çzñí
\ No newline at end of file diff --git a/fuzz/corpus/fuzz_serialization/50f7bf3ec485cf36e17c682136cf193664a54ec6 b/fuzz/corpus/fuzz_serialization/50f7bf3ec485cf36e17c682136cf193664a54ec6 Binary files differnew file mode 100644 index 000000000..02dd3dfa3 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/50f7bf3ec485cf36e17c682136cf193664a54ec6 diff --git a/fuzz/corpus/fuzz_serialization/524d8a5744ca12baee06ac2d445758e0839e6cae b/fuzz/corpus/fuzz_serialization/524d8a5744ca12baee06ac2d445758e0839e6cae new file mode 100644 index 000000000..2c01b5333 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/524d8a5744ca12baee06ac2d445758e0839e6cae @@ -0,0 +1 @@ +â„
\ No newline at end of file diff --git a/fuzz/corpus/fuzz_serialization/531faf1813c549e0360c85b7eb48e8027d4cedca b/fuzz/corpus/fuzz_serialization/531faf1813c549e0360c85b7eb48e8027d4cedca Binary files differnew file mode 100644 index 000000000..4f2cbcb54 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/531faf1813c549e0360c85b7eb48e8027d4cedca diff --git a/fuzz/corpus/fuzz_serialization/54a1f0e11a61f82bfc474938c0d9109e263d918c b/fuzz/corpus/fuzz_serialization/54a1f0e11a61f82bfc474938c0d9109e263d918c Binary files differnew file mode 100644 index 000000000..01acfc37d --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/54a1f0e11a61f82bfc474938c0d9109e263d918c diff --git a/fuzz/corpus/fuzz_serialization/5528584ddeb60c8e7ea81d4c0bc4227734eeb393 b/fuzz/corpus/fuzz_serialization/5528584ddeb60c8e7ea81d4c0bc4227734eeb393 Binary files differnew file mode 100644 index 000000000..a929bf2e5 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/5528584ddeb60c8e7ea81d4c0bc4227734eeb393 diff --git a/fuzz/corpus/fuzz_serialization/55ccac63fbaaefbb92a099f0b7a53dee3d3066b3 b/fuzz/corpus/fuzz_serialization/55ccac63fbaaefbb92a099f0b7a53dee3d3066b3 Binary files differnew file mode 100644 index 000000000..6e7364087 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/55ccac63fbaaefbb92a099f0b7a53dee3d3066b3 diff --git a/fuzz/corpus/fuzz_serialization/5654db3776d1ca71a669fca63266a558e0fd9de5 b/fuzz/corpus/fuzz_serialization/5654db3776d1ca71a669fca63266a558e0fd9de5 Binary files differnew file mode 100644 index 000000000..14c8a11d7 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/5654db3776d1ca71a669fca63266a558e0fd9de5 diff --git a/fuzz/corpus/fuzz_serialization/592504fa45d5574c992ce453dbce57c85cd8c7d5 b/fuzz/corpus/fuzz_serialization/592504fa45d5574c992ce453dbce57c85cd8c7d5 new file mode 100644 index 000000000..d51ddd967 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/592504fa45d5574c992ce453dbce57c85cd8c7d5 @@ -0,0 +1 @@ +0+;;þI5jÕ@;x¥Ëmê
\ No newline at end of file diff --git a/fuzz/corpus/fuzz_serialization/592d762aa688783a742e8f8a17dde6fef0e6b5d6 b/fuzz/corpus/fuzz_serialization/592d762aa688783a742e8f8a17dde6fef0e6b5d6 Binary files differnew file mode 100644 index 000000000..ea3132db1 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/592d762aa688783a742e8f8a17dde6fef0e6b5d6 diff --git a/fuzz/corpus/fuzz_serialization/596704a7ad7f8f8707f5b78d18e15d341dc39d81 b/fuzz/corpus/fuzz_serialization/596704a7ad7f8f8707f5b78d18e15d341dc39d81 new file mode 100644 index 000000000..ece506958 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/596704a7ad7f8f8707f5b78d18e15d341dc39d81 @@ -0,0 +1,2 @@ +ƒ +]C%
\ No newline at end of file diff --git a/fuzz/corpus/fuzz_serialization/5ad5bc1d2fd6dcceea9fa2f0ad47687af9d4b363 b/fuzz/corpus/fuzz_serialization/5ad5bc1d2fd6dcceea9fa2f0ad47687af9d4b363 Binary files differnew file mode 100644 index 000000000..9e153d128 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/5ad5bc1d2fd6dcceea9fa2f0ad47687af9d4b363 diff --git a/fuzz/corpus/fuzz_serialization/5e90850401034e03214848e68ac58a16eb4500ce b/fuzz/corpus/fuzz_serialization/5e90850401034e03214848e68ac58a16eb4500ce Binary files differnew file mode 100644 index 000000000..cdb5abc5c --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/5e90850401034e03214848e68ac58a16eb4500ce diff --git a/fuzz/corpus/fuzz_serialization/62691b118afe47b94cb40c796bdef339d0d988d8 b/fuzz/corpus/fuzz_serialization/62691b118afe47b94cb40c796bdef339d0d988d8 Binary files differnew file mode 100644 index 000000000..30a4101b7 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/62691b118afe47b94cb40c796bdef339d0d988d8 diff --git a/fuzz/corpus/fuzz_serialization/63d993bb60fffd7db971b2cd6a4705bc8b1a48b1 b/fuzz/corpus/fuzz_serialization/63d993bb60fffd7db971b2cd6a4705bc8b1a48b1 Binary files differnew file mode 100644 index 000000000..83dab5779 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/63d993bb60fffd7db971b2cd6a4705bc8b1a48b1 diff --git a/fuzz/corpus/fuzz_serialization/65b3da6770c4f54774165c7d38dbe3798014aed1 b/fuzz/corpus/fuzz_serialization/65b3da6770c4f54774165c7d38dbe3798014aed1 new file mode 100644 index 000000000..c64d06fcc --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/65b3da6770c4f54774165c7d38dbe3798014aed1 @@ -0,0 +1 @@ +;±e}û"0ô{ëuêxn¸Ý‹cêÏéôÌ^šP*
\ No newline at end of file diff --git a/fuzz/corpus/fuzz_serialization/65f4e4a70975970600b24ab9bad2fd4566811401 b/fuzz/corpus/fuzz_serialization/65f4e4a70975970600b24ab9bad2fd4566811401 Binary files differnew file mode 100644 index 000000000..5991ec2af --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/65f4e4a70975970600b24ab9bad2fd4566811401 diff --git a/fuzz/corpus/fuzz_serialization/67da0bbde8a646154e47bf2aa07a6c8d9dbc1b3d b/fuzz/corpus/fuzz_serialization/67da0bbde8a646154e47bf2aa07a6c8d9dbc1b3d Binary files differnew file mode 100644 index 000000000..18538d7f8 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/67da0bbde8a646154e47bf2aa07a6c8d9dbc1b3d diff --git a/fuzz/corpus/fuzz_serialization/680d6e5c33be1f40552f8490c4b48092dc60b48d b/fuzz/corpus/fuzz_serialization/680d6e5c33be1f40552f8490c4b48092dc60b48d new file mode 100644 index 000000000..78f4a3d54 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/680d6e5c33be1f40552f8490c4b48092dc60b48d @@ -0,0 +1 @@ +fÿ+
\ No newline at end of file diff --git a/fuzz/corpus/fuzz_serialization/689feb67d67a14b517b465a04f53405737559a1f b/fuzz/corpus/fuzz_serialization/689feb67d67a14b517b465a04f53405737559a1f new file mode 100644 index 000000000..6beaed06b --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/689feb67d67a14b517b465a04f53405737559a1f @@ -0,0 +1 @@ +*Ë™
\ No newline at end of file diff --git a/fuzz/corpus/fuzz_serialization/69ac32bf48028d8ae9178d8033d97c203a581975 b/fuzz/corpus/fuzz_serialization/69ac32bf48028d8ae9178d8033d97c203a581975 Binary files differnew file mode 100644 index 000000000..7d80bf257 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/69ac32bf48028d8ae9178d8033d97c203a581975 diff --git a/fuzz/corpus/fuzz_serialization/6a366c1317147c81f22beb5d30508ba99f9cfc1a b/fuzz/corpus/fuzz_serialization/6a366c1317147c81f22beb5d30508ba99f9cfc1a Binary files differnew file mode 100644 index 000000000..5ee2b370d --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/6a366c1317147c81f22beb5d30508ba99f9cfc1a diff --git a/fuzz/corpus/fuzz_serialization/6ee5029e3f543c4b4c0aaf35ed145faf7d0e801b b/fuzz/corpus/fuzz_serialization/6ee5029e3f543c4b4c0aaf35ed145faf7d0e801b Binary files differnew file mode 100644 index 000000000..285583316 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/6ee5029e3f543c4b4c0aaf35ed145faf7d0e801b diff --git a/fuzz/corpus/fuzz_serialization/6fcd960ca2930b6937c917eecb9260a0aa09c84a b/fuzz/corpus/fuzz_serialization/6fcd960ca2930b6937c917eecb9260a0aa09c84a Binary files differnew file mode 100644 index 000000000..c897e4c1c --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/6fcd960ca2930b6937c917eecb9260a0aa09c84a diff --git a/fuzz/corpus/fuzz_serialization/73a3ced41d5b17c23f7dc9bc9f14fa4d54bcbcf6 b/fuzz/corpus/fuzz_serialization/73a3ced41d5b17c23f7dc9bc9f14fa4d54bcbcf6 Binary files differnew file mode 100644 index 000000000..1b8e734f2 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/73a3ced41d5b17c23f7dc9bc9f14fa4d54bcbcf6 diff --git a/fuzz/corpus/fuzz_serialization/76a328c4bdcf451f29c126bf8afdb2fe7959f6de b/fuzz/corpus/fuzz_serialization/76a328c4bdcf451f29c126bf8afdb2fe7959f6de Binary files differnew file mode 100644 index 000000000..d58ebc3a2 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/76a328c4bdcf451f29c126bf8afdb2fe7959f6de diff --git a/fuzz/corpus/fuzz_serialization/79ef2ee1dbd00cc89471b5a14e9e5d1ddf72433c b/fuzz/corpus/fuzz_serialization/79ef2ee1dbd00cc89471b5a14e9e5d1ddf72433c Binary files differnew file mode 100644 index 000000000..101746c36 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/79ef2ee1dbd00cc89471b5a14e9e5d1ddf72433c diff --git a/fuzz/corpus/fuzz_serialization/7f41b5802c84844391268f34b64754a448042ac7 b/fuzz/corpus/fuzz_serialization/7f41b5802c84844391268f34b64754a448042ac7 Binary files differnew file mode 100644 index 000000000..f6c4b9df0 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/7f41b5802c84844391268f34b64754a448042ac7 diff --git a/fuzz/corpus/fuzz_serialization/80904ef56b525af4d82b26c38ee9ed84fbe0e8aa b/fuzz/corpus/fuzz_serialization/80904ef56b525af4d82b26c38ee9ed84fbe0e8aa Binary files differnew file mode 100644 index 000000000..471284788 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/80904ef56b525af4d82b26c38ee9ed84fbe0e8aa diff --git a/fuzz/corpus/fuzz_serialization/80a2f44ca0165122312c549c2d3041e22ec72bb2 b/fuzz/corpus/fuzz_serialization/80a2f44ca0165122312c549c2d3041e22ec72bb2 new file mode 100644 index 000000000..2ddc68f8b --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/80a2f44ca0165122312c549c2d3041e22ec72bb2 @@ -0,0 +1 @@ +0ôLLLLLLÿÿâ
\ No newline at end of file diff --git a/fuzz/corpus/fuzz_serialization/83631c962f6eb3da79b4ac7c8c7074b8d6227679 b/fuzz/corpus/fuzz_serialization/83631c962f6eb3da79b4ac7c8c7074b8d6227679 new file mode 100644 index 000000000..aa3a75469 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/83631c962f6eb3da79b4ac7c8c7074b8d6227679 @@ -0,0 +1 @@ +ÜØ!9œºdD»D£]‡4µ}±
\ No newline at end of file diff --git a/fuzz/corpus/fuzz_serialization/8441252d77c0917fc6c320cfbf39750f4199ece0 b/fuzz/corpus/fuzz_serialization/8441252d77c0917fc6c320cfbf39750f4199ece0 Binary files differnew file mode 100644 index 000000000..7fe4a3d58 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/8441252d77c0917fc6c320cfbf39750f4199ece0 diff --git a/fuzz/corpus/fuzz_serialization/858e8a25126145e8652b1c7b343ed9ff1f6c553f b/fuzz/corpus/fuzz_serialization/858e8a25126145e8652b1c7b343ed9ff1f6c553f Binary files differnew file mode 100644 index 000000000..99a9b737f --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/858e8a25126145e8652b1c7b343ed9ff1f6c553f diff --git a/fuzz/corpus/fuzz_serialization/8a5c1ec4919c4969acb7773394d0a6be0db6b095 b/fuzz/corpus/fuzz_serialization/8a5c1ec4919c4969acb7773394d0a6be0db6b095 new file mode 100644 index 000000000..921072066 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/8a5c1ec4919c4969acb7773394d0a6be0db6b095 @@ -0,0 +1 @@ +mÚ
\ No newline at end of file diff --git a/fuzz/corpus/fuzz_serialization/8b00d59cd338662b7c1dedbe6e59a79cf0c6c68f b/fuzz/corpus/fuzz_serialization/8b00d59cd338662b7c1dedbe6e59a79cf0c6c68f new file mode 100644 index 000000000..e115e60d4 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/8b00d59cd338662b7c1dedbe6e59a79cf0c6c68f @@ -0,0 +1 @@ +ƒ]C%
\ No newline at end of file diff --git a/fuzz/corpus/fuzz_serialization/8f34b6450307981b6781762ac91d95be712b356e b/fuzz/corpus/fuzz_serialization/8f34b6450307981b6781762ac91d95be712b356e Binary files differnew file mode 100644 index 000000000..a844905c3 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/8f34b6450307981b6781762ac91d95be712b356e diff --git a/fuzz/corpus/fuzz_serialization/9081ee6e4c227d5358b1f1ddc5c0cbe028bd8dda b/fuzz/corpus/fuzz_serialization/9081ee6e4c227d5358b1f1ddc5c0cbe028bd8dda new file mode 100644 index 000000000..2e8e2be6e --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/9081ee6e4c227d5358b1f1ddc5c0cbe028bd8dda @@ -0,0 +1 @@ +0«Ú
\ No newline at end of file diff --git a/fuzz/corpus/fuzz_serialization/9170a32e0626ef41739a17e35b953834eb1c5615 b/fuzz/corpus/fuzz_serialization/9170a32e0626ef41739a17e35b953834eb1c5615 Binary files differnew file mode 100644 index 000000000..b19b77229 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/9170a32e0626ef41739a17e35b953834eb1c5615 diff --git a/fuzz/corpus/fuzz_serialization/92bc0af3e1560941650609e3838e9f2a8368ae05 b/fuzz/corpus/fuzz_serialization/92bc0af3e1560941650609e3838e9f2a8368ae05 new file mode 100644 index 000000000..4ccf7e9eb --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/92bc0af3e1560941650609e3838e9f2a8368ae05 @@ -0,0 +1,2 @@ +ƒ +úçƒÁ¬]C%
\ No newline at end of file diff --git a/fuzz/corpus/fuzz_serialization/9405f4e8857cfd57af09922f2288c7a3ecb3ae37 b/fuzz/corpus/fuzz_serialization/9405f4e8857cfd57af09922f2288c7a3ecb3ae37 Binary files differnew file mode 100644 index 000000000..3aab7d579 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/9405f4e8857cfd57af09922f2288c7a3ecb3ae37 diff --git a/fuzz/corpus/fuzz_serialization/954f87b690e4197ce18370cc095e38f19d46079e b/fuzz/corpus/fuzz_serialization/954f87b690e4197ce18370cc095e38f19d46079e Binary files differnew file mode 100644 index 000000000..c90d8a75f --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/954f87b690e4197ce18370cc095e38f19d46079e diff --git a/fuzz/corpus/fuzz_serialization/95c8e1e713d2ae5295f770d12f179f1f3a1ccd50 b/fuzz/corpus/fuzz_serialization/95c8e1e713d2ae5295f770d12f179f1f3a1ccd50 new file mode 100644 index 000000000..0e3125bea --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/95c8e1e713d2ae5295f770d12f179f1f3a1ccd50 @@ -0,0 +1 @@ +ðáþð
\ No newline at end of file diff --git a/fuzz/corpus/fuzz_serialization/9b232d55db40c0c0f37d1a1e32900ccc8cf6fa3c b/fuzz/corpus/fuzz_serialization/9b232d55db40c0c0f37d1a1e32900ccc8cf6fa3c Binary files differnew file mode 100644 index 000000000..1224bba0c --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/9b232d55db40c0c0f37d1a1e32900ccc8cf6fa3c diff --git a/fuzz/corpus/fuzz_serialization/9bc313bbd93a1b7255982a0b530216f895f1e7e9 b/fuzz/corpus/fuzz_serialization/9bc313bbd93a1b7255982a0b530216f895f1e7e9 Binary files differnew file mode 100644 index 000000000..50b0c0d76 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/9bc313bbd93a1b7255982a0b530216f895f1e7e9 diff --git a/fuzz/corpus/fuzz_serialization/a5129c501ad4d923bab9f5a6bd2c5285c29a3b3b b/fuzz/corpus/fuzz_serialization/a5129c501ad4d923bab9f5a6bd2c5285c29a3b3b Binary files differnew file mode 100644 index 000000000..6b4e602e6 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/a5129c501ad4d923bab9f5a6bd2c5285c29a3b3b diff --git a/fuzz/corpus/fuzz_serialization/a5e860ac13a20ab2f18783407f78bb905a0963eb b/fuzz/corpus/fuzz_serialization/a5e860ac13a20ab2f18783407f78bb905a0963eb Binary files differnew file mode 100644 index 000000000..d0a3ba75b --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/a5e860ac13a20ab2f18783407f78bb905a0963eb diff --git a/fuzz/corpus/fuzz_serialization/a6fe820db6653fb5927c1a6bd8f51312efa25066 b/fuzz/corpus/fuzz_serialization/a6fe820db6653fb5927c1a6bd8f51312efa25066 Binary files differnew file mode 100644 index 000000000..d005283d9 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/a6fe820db6653fb5927c1a6bd8f51312efa25066 diff --git a/fuzz/corpus/fuzz_serialization/a86035f1a172b4fb88a7a69a7067fd47e2e27879 b/fuzz/corpus/fuzz_serialization/a86035f1a172b4fb88a7a69a7067fd47e2e27879 Binary files differnew file mode 100644 index 000000000..91de8509c --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/a86035f1a172b4fb88a7a69a7067fd47e2e27879 diff --git a/fuzz/corpus/fuzz_serialization/ac2592e04c8ccbd9fce8ee3e3b24936bacbea892 b/fuzz/corpus/fuzz_serialization/ac2592e04c8ccbd9fce8ee3e3b24936bacbea892 Binary files differnew file mode 100644 index 000000000..f9abe6e30 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/ac2592e04c8ccbd9fce8ee3e3b24936bacbea892 diff --git a/fuzz/corpus/fuzz_serialization/af28dd714ec6294a073e197f8dd7d71bcb6f1e2c b/fuzz/corpus/fuzz_serialization/af28dd714ec6294a073e197f8dd7d71bcb6f1e2c new file mode 100644 index 000000000..7a008927f --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/af28dd714ec6294a073e197f8dd7d71bcb6f1e2c @@ -0,0 +1 @@ ++ fÝ+
\ No newline at end of file diff --git a/fuzz/corpus/fuzz_serialization/b0c497a1362aaf4a88c748cd0cb7d7e9f42335a9 b/fuzz/corpus/fuzz_serialization/b0c497a1362aaf4a88c748cd0cb7d7e9f42335a9 Binary files differnew file mode 100644 index 000000000..0b2f829bb --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/b0c497a1362aaf4a88c748cd0cb7d7e9f42335a9 diff --git a/fuzz/corpus/fuzz_serialization/b5bef5ad04216ad1f791e597955d8d8186d62708 b/fuzz/corpus/fuzz_serialization/b5bef5ad04216ad1f791e597955d8d8186d62708 Binary files differnew file mode 100644 index 000000000..014ecd084 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/b5bef5ad04216ad1f791e597955d8d8186d62708 diff --git a/fuzz/corpus/fuzz_serialization/b5e0d763f52cbcff1901a681e4c20e2779199010 b/fuzz/corpus/fuzz_serialization/b5e0d763f52cbcff1901a681e4c20e2779199010 new file mode 100644 index 000000000..5b06dd866 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/b5e0d763f52cbcff1901a681e4c20e2779199010 @@ -0,0 +1 @@ +s±M›ù4V
\ No newline at end of file diff --git a/fuzz/corpus/fuzz_serialization/b8519b2ff0c0594b3efb263a8fbab2c95f47cb4f b/fuzz/corpus/fuzz_serialization/b8519b2ff0c0594b3efb263a8fbab2c95f47cb4f Binary files differnew file mode 100644 index 000000000..5a1e8837b --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/b8519b2ff0c0594b3efb263a8fbab2c95f47cb4f diff --git a/fuzz/corpus/fuzz_serialization/b95f6fb075e53d512a044a2360f433369b040e2a b/fuzz/corpus/fuzz_serialization/b95f6fb075e53d512a044a2360f433369b040e2a Binary files differnew file mode 100644 index 000000000..4bcbaffad --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/b95f6fb075e53d512a044a2360f433369b040e2a diff --git a/fuzz/corpus/fuzz_serialization/ba89b5c3dcd4dfc793072a98906602abe615d3df b/fuzz/corpus/fuzz_serialization/ba89b5c3dcd4dfc793072a98906602abe615d3df Binary files differnew file mode 100644 index 000000000..6b1506cb6 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/ba89b5c3dcd4dfc793072a98906602abe615d3df diff --git a/fuzz/corpus/fuzz_serialization/bbde76499882a6ff1e92ed9e5450b9d1b403250d b/fuzz/corpus/fuzz_serialization/bbde76499882a6ff1e92ed9e5450b9d1b403250d Binary files differnew file mode 100644 index 000000000..0f2625ea0 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/bbde76499882a6ff1e92ed9e5450b9d1b403250d diff --git a/fuzz/corpus/fuzz_serialization/bcb4b1979366bc14e35ecceef03f26a476f91538 b/fuzz/corpus/fuzz_serialization/bcb4b1979366bc14e35ecceef03f26a476f91538 Binary files differnew file mode 100644 index 000000000..c5936b4e6 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/bcb4b1979366bc14e35ecceef03f26a476f91538 diff --git a/fuzz/corpus/fuzz_serialization/beca236cd931cf5352ec7b89411909a4b44c9138 b/fuzz/corpus/fuzz_serialization/beca236cd931cf5352ec7b89411909a4b44c9138 Binary files differnew file mode 100644 index 000000000..ffe64f964 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/beca236cd931cf5352ec7b89411909a4b44c9138 diff --git a/fuzz/corpus/fuzz_serialization/c1cebe31fadd74fc77b17ce6c0e44ef289444c6d b/fuzz/corpus/fuzz_serialization/c1cebe31fadd74fc77b17ce6c0e44ef289444c6d new file mode 100644 index 000000000..ad00adb3d --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/c1cebe31fadd74fc77b17ce6c0e44ef289444c6d @@ -0,0 +1 @@ +0ôOLÿÿÿÿÿÿâ
\ No newline at end of file diff --git a/fuzz/corpus/fuzz_serialization/c340e8e3f8b1bff333981c8d463daddd5ff4e855 b/fuzz/corpus/fuzz_serialization/c340e8e3f8b1bff333981c8d463daddd5ff4e855 Binary files differnew file mode 100644 index 000000000..3eb385175 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/c340e8e3f8b1bff333981c8d463daddd5ff4e855 diff --git a/fuzz/corpus/fuzz_serialization/c68eef36f0848d2dc34d212d294f37ce490d3258 b/fuzz/corpus/fuzz_serialization/c68eef36f0848d2dc34d212d294f37ce490d3258 Binary files differnew file mode 100644 index 000000000..899303e3d --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/c68eef36f0848d2dc34d212d294f37ce490d3258 diff --git a/fuzz/corpus/fuzz_serialization/c69ca63f0353737b22874f88f5a67dafc1bf7d44 b/fuzz/corpus/fuzz_serialization/c69ca63f0353737b22874f88f5a67dafc1bf7d44 Binary files differnew file mode 100644 index 000000000..11e6dc1e2 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/c69ca63f0353737b22874f88f5a67dafc1bf7d44 diff --git a/fuzz/corpus/fuzz_serialization/ce6b603fce80719da46c97eb1b95bbd0ad777070 b/fuzz/corpus/fuzz_serialization/ce6b603fce80719da46c97eb1b95bbd0ad777070 Binary files differnew file mode 100644 index 000000000..4855be1ac --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/ce6b603fce80719da46c97eb1b95bbd0ad777070 diff --git a/fuzz/corpus/fuzz_serialization/ce8fbfa93be2bb9182b40186316e43da0dbc55d8 b/fuzz/corpus/fuzz_serialization/ce8fbfa93be2bb9182b40186316e43da0dbc55d8 Binary files differnew file mode 100644 index 000000000..ecc6f1e46 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/ce8fbfa93be2bb9182b40186316e43da0dbc55d8 diff --git a/fuzz/corpus/fuzz_serialization/d0476e429d72246b03d172241b0d201c7f012be8 b/fuzz/corpus/fuzz_serialization/d0476e429d72246b03d172241b0d201c7f012be8 new file mode 100644 index 000000000..4bc4aad7b --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/d0476e429d72246b03d172241b0d201c7f012be8 @@ -0,0 +1 @@ +âß
\ No newline at end of file diff --git a/fuzz/corpus/fuzz_serialization/d1f6790b8477c7e41e3dc072c24b4b80aafc6739 b/fuzz/corpus/fuzz_serialization/d1f6790b8477c7e41e3dc072c24b4b80aafc6739 new file mode 100644 index 000000000..2862f8471 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/d1f6790b8477c7e41e3dc072c24b4b80aafc6739 @@ -0,0 +1 @@ +Cƒ
\ No newline at end of file diff --git a/fuzz/corpus/fuzz_serialization/d56083163211e89f5cfa50e8ae80d1a11d03c250 b/fuzz/corpus/fuzz_serialization/d56083163211e89f5cfa50e8ae80d1a11d03c250 Binary files differnew file mode 100644 index 000000000..0d713ad38 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/d56083163211e89f5cfa50e8ae80d1a11d03c250 diff --git a/fuzz/corpus/fuzz_serialization/d8db49096b062b619719f6308c8d2b9cf043c7c2 b/fuzz/corpus/fuzz_serialization/d8db49096b062b619719f6308c8d2b9cf043c7c2 new file mode 100644 index 000000000..683356df3 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/d8db49096b062b619719f6308c8d2b9cf043c7c2 @@ -0,0 +1 @@ +Egé
\ No newline at end of file diff --git a/fuzz/corpus/fuzz_serialization/d8dcf7b34858f2f7e7d8e50337bd68bc4b4f4fb0 b/fuzz/corpus/fuzz_serialization/d8dcf7b34858f2f7e7d8e50337bd68bc4b4f4fb0 Binary files differnew file mode 100644 index 000000000..3adb67d26 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/d8dcf7b34858f2f7e7d8e50337bd68bc4b4f4fb0 diff --git a/fuzz/corpus/fuzz_serialization/d9bf92f929213b053f6e37ef4e18c9533d0d42ff b/fuzz/corpus/fuzz_serialization/d9bf92f929213b053f6e37ef4e18c9533d0d42ff new file mode 100644 index 000000000..2855f0a7c --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/d9bf92f929213b053f6e37ef4e18c9533d0d42ff @@ -0,0 +1 @@ +÷oÿ
\ No newline at end of file diff --git a/fuzz/corpus/fuzz_serialization/dae54cc5b98acbe40db9a826182e66c06dc6872b b/fuzz/corpus/fuzz_serialization/dae54cc5b98acbe40db9a826182e66c06dc6872b new file mode 100644 index 000000000..cdecab761 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/dae54cc5b98acbe40db9a826182e66c06dc6872b @@ -0,0 +1 @@ +ÿ
LLLÿÿâ
\ No newline at end of file diff --git a/fuzz/corpus/fuzz_serialization/db178237414743cf16da250d10ffd0ae98bd127f b/fuzz/corpus/fuzz_serialization/db178237414743cf16da250d10ffd0ae98bd127f new file mode 100644 index 000000000..1eee786a1 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/db178237414743cf16da250d10ffd0ae98bd127f @@ -0,0 +1 @@ +ñr0;5¥Ëoê
\ No newline at end of file diff --git a/fuzz/corpus/fuzz_serialization/dbb873b6c49161fb72609a09c79b1b4ef461e3f7 b/fuzz/corpus/fuzz_serialization/dbb873b6c49161fb72609a09c79b1b4ef461e3f7 Binary files differnew file mode 100644 index 000000000..e48e6a16f --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/dbb873b6c49161fb72609a09c79b1b4ef461e3f7 diff --git a/fuzz/corpus/fuzz_serialization/dbee5c3fa40e7883ee26d33234ed6364cb7b3da6 b/fuzz/corpus/fuzz_serialization/dbee5c3fa40e7883ee26d33234ed6364cb7b3da6 Binary files differnew file mode 100644 index 000000000..9a8a489b0 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/dbee5c3fa40e7883ee26d33234ed6364cb7b3da6 diff --git a/fuzz/corpus/fuzz_serialization/dd735e0d38c3775492fc9d0346516eb675c47428 b/fuzz/corpus/fuzz_serialization/dd735e0d38c3775492fc9d0346516eb675c47428 Binary files differnew file mode 100644 index 000000000..62ab6fa84 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/dd735e0d38c3775492fc9d0346516eb675c47428 diff --git a/fuzz/corpus/fuzz_serialization/ddb98f7964ea51bb468c9fa93af5f11bfc072627 b/fuzz/corpus/fuzz_serialization/ddb98f7964ea51bb468c9fa93af5f11bfc072627 Binary files differnew file mode 100644 index 000000000..abdfd7984 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/ddb98f7964ea51bb468c9fa93af5f11bfc072627 diff --git a/fuzz/corpus/fuzz_serialization/e3c1912a734aa51cc75fb7e67db525f34ac1e43e b/fuzz/corpus/fuzz_serialization/e3c1912a734aa51cc75fb7e67db525f34ac1e43e new file mode 100644 index 000000000..11ecbac26 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/e3c1912a734aa51cc75fb7e67db525f34ac1e43e @@ -0,0 +1 @@ +{ fÝÒ¾
\ No newline at end of file diff --git a/fuzz/corpus/fuzz_serialization/e76108ff6580c8809875c5051c8a3df9ce8fc85a b/fuzz/corpus/fuzz_serialization/e76108ff6580c8809875c5051c8a3df9ce8fc85a Binary files differnew file mode 100644 index 000000000..635817ced --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/e76108ff6580c8809875c5051c8a3df9ce8fc85a diff --git a/fuzz/corpus/fuzz_serialization/ebd0b9c4978407a17b7331e0562dc9ad31b29204 b/fuzz/corpus/fuzz_serialization/ebd0b9c4978407a17b7331e0562dc9ad31b29204 new file mode 100644 index 000000000..b8a9f18e7 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/ebd0b9c4978407a17b7331e0562dc9ad31b29204 @@ -0,0 +1 @@ +Yö
\ No newline at end of file diff --git a/fuzz/corpus/fuzz_serialization/f0ab531075130e5e92df690fa7311dafed5b43bc b/fuzz/corpus/fuzz_serialization/f0ab531075130e5e92df690fa7311dafed5b43bc Binary files differnew file mode 100644 index 000000000..cd1a4b19d --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/f0ab531075130e5e92df690fa7311dafed5b43bc diff --git a/fuzz/corpus/fuzz_serialization/f0b7597e0a424ca259bbd593ebf179789dbc0c09 b/fuzz/corpus/fuzz_serialization/f0b7597e0a424ca259bbd593ebf179789dbc0c09 Binary files differnew file mode 100644 index 000000000..f6e04204a --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/f0b7597e0a424ca259bbd593ebf179789dbc0c09 diff --git a/fuzz/corpus/fuzz_serialization/f573e80e11c969b592809f357dc72eb3caf356dd b/fuzz/corpus/fuzz_serialization/f573e80e11c969b592809f357dc72eb3caf356dd new file mode 100644 index 000000000..d01f29155 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/f573e80e11c969b592809f357dc72eb3caf356dd @@ -0,0 +1 @@ +âß
\ No newline at end of file diff --git a/fuzz/corpus/fuzz_serialization/f69a22307982dab12f462040e386daba86052e2c b/fuzz/corpus/fuzz_serialization/f69a22307982dab12f462040e386daba86052e2c Binary files differnew file mode 100644 index 000000000..66f59bcc7 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/f69a22307982dab12f462040e386daba86052e2c diff --git a/fuzz/corpus/fuzz_serialization/f82023faffb3b3e67d5d587caa6b53ab10f27fb6 b/fuzz/corpus/fuzz_serialization/f82023faffb3b3e67d5d587caa6b53ab10f27fb6 Binary files differnew file mode 100644 index 000000000..ef957661e --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/f82023faffb3b3e67d5d587caa6b53ab10f27fb6 diff --git a/fuzz/corpus/fuzz_serialization/fa30ba2c9565dcccb091ade5dbab902e0cf0c3b4 b/fuzz/corpus/fuzz_serialization/fa30ba2c9565dcccb091ade5dbab902e0cf0c3b4 Binary files differnew file mode 100644 index 000000000..5a9a0ba70 --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/fa30ba2c9565dcccb091ade5dbab902e0cf0c3b4 diff --git a/fuzz/corpus/fuzz_serialization/fab44564f0279bbfeddbbdfe97a92b882d7a3e9c b/fuzz/corpus/fuzz_serialization/fab44564f0279bbfeddbbdfe97a92b882d7a3e9c new file mode 100644 index 000000000..ee74b00ff --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/fab44564f0279bbfeddbbdfe97a92b882d7a3e9c @@ -0,0 +1 @@ +}œ„–DŽ™ãƒÁa‘§óšP¨»Ù04
\ No newline at end of file diff --git a/fuzz/corpus/fuzz_serialization/fafe20628a68c12b150c9af37e24c36f74672288 b/fuzz/corpus/fuzz_serialization/fafe20628a68c12b150c9af37e24c36f74672288 new file mode 100644 index 000000000..df599fbaa --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/fafe20628a68c12b150c9af37e24c36f74672288 @@ -0,0 +1 @@ +Ü
\ No newline at end of file diff --git a/fuzz/corpus/fuzz_serialization/fed40fead812cb12d7906402be2efb5a39ff84c6 b/fuzz/corpus/fuzz_serialization/fed40fead812cb12d7906402be2efb5a39ff84c6 Binary files differnew file mode 100644 index 000000000..41850354d --- /dev/null +++ b/fuzz/corpus/fuzz_serialization/fed40fead812cb12d7906402be2efb5a39ff84c6 diff --git a/fuzz/fuzz_serialization.cpp b/fuzz/fuzz_serialization.cpp new file mode 100644 index 000000000..45596e742 --- /dev/null +++ b/fuzz/fuzz_serialization.cpp @@ -0,0 +1,139 @@ +#include "ndpi_api.h" +#include "fuzz_common_code.h" + +#include <stdint.h> +#include <stdio.h> +#include <assert.h> +#include "fuzzer/FuzzedDataProvider.h" + +extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { + FuzzedDataProvider fuzzed_data(data, size); + u_int16_t i, num_iteration; + ndpi_serializer serializer, serializer_cloned, deserializer; + ndpi_serialization_format fmt; + int rc; + std::vector<char>d; + char kbuf[32]; + u_int32_t buffer_len; + + /* To allow memory allocation failures */ + fuzz_set_alloc_callbacks_and_seed(size); + + fmt = static_cast<ndpi_serialization_format>(fuzzed_data.ConsumeIntegralInRange(1, 3)); + + if (fuzzed_data.ConsumeBool()) + rc = ndpi_init_serializer(&serializer, fmt); + else + rc = ndpi_init_serializer_ll(&serializer, fmt, fuzzed_data.ConsumeIntegralInRange(0, 64)); + + if (rc != 0) + return 0; + + if (fmt == ndpi_serialization_format_csv) + ndpi_serializer_set_csv_separator(&serializer, ','); + + num_iteration = fuzzed_data.ConsumeIntegralInRange(0, 16); + for (i = 0; i < num_iteration; i++) { + memset(kbuf, '\0', sizeof(kbuf)); /* It is also used as binary key */ + snprintf(kbuf, sizeof(kbuf), "Key %d", i); + + ndpi_serialize_uint32_uint32(&serializer, i, fuzzed_data.ConsumeIntegral<u_int32_t>()); + ndpi_serialize_uint32_int32(&serializer, i, fuzzed_data.ConsumeIntegral<int32_t>()); + ndpi_serialize_uint32_uint64(&serializer, i, fuzzed_data.ConsumeIntegral<u_int64_t>()); + ndpi_serialize_uint32_int64(&serializer, i, fuzzed_data.ConsumeIntegral<int64_t>()); + ndpi_serialize_uint32_float(&serializer, i, fuzzed_data.ConsumeFloatingPoint<float>(), "%f"); + if (fmt != ndpi_serialization_format_tlv) + ndpi_serialize_uint32_double(&serializer, i, fuzzed_data.ConsumeFloatingPoint<double>(), "%lf"); + d = fuzzed_data.ConsumeBytes<char>(16); + ndpi_serialize_uint32_binary(&serializer, i, d.data(), d.size()); + ndpi_serialize_uint32_string(&serializer, i, fuzzed_data.ConsumeBytesAsString(8).c_str()); + ndpi_serialize_uint32_boolean(&serializer, i, fuzzed_data.ConsumeIntegral<int8_t>()); + + ndpi_serialize_string_uint32(&serializer, kbuf, fuzzed_data.ConsumeIntegral<u_int32_t>()); + ndpi_serialize_string_int32(&serializer, kbuf, fuzzed_data.ConsumeIntegral<int32_t>()); + ndpi_serialize_string_uint64(&serializer, kbuf, fuzzed_data.ConsumeIntegral<u_int64_t>()); + ndpi_serialize_string_int64(&serializer, kbuf, fuzzed_data.ConsumeIntegral<int64_t>()); + ndpi_serialize_string_float(&serializer, kbuf, fuzzed_data.ConsumeFloatingPoint<float>(), "%f"); + if (fmt != ndpi_serialization_format_tlv) + ndpi_serialize_string_double(&serializer, kbuf, fuzzed_data.ConsumeFloatingPoint<double>(), "%lf"); + ndpi_serialize_string_string(&serializer, kbuf, fuzzed_data.ConsumeBytesAsString(8).c_str()); + ndpi_serialize_string_boolean(&serializer, kbuf, fuzzed_data.ConsumeIntegral<int8_t>()); + + ndpi_serialize_binary_uint32(&serializer, kbuf, sizeof(kbuf), fuzzed_data.ConsumeIntegral<u_int32_t>()); + ndpi_serialize_binary_int32(&serializer, kbuf, sizeof(kbuf), fuzzed_data.ConsumeIntegral<int32_t>()); + ndpi_serialize_binary_uint64(&serializer, kbuf, sizeof(kbuf), fuzzed_data.ConsumeIntegral<u_int64_t>()); + ndpi_serialize_binary_int64(&serializer, kbuf, sizeof(kbuf), fuzzed_data.ConsumeIntegral<int64_t>()); + ndpi_serialize_binary_float(&serializer, kbuf, sizeof(kbuf), fuzzed_data.ConsumeFloatingPoint<float>(), "%f"); + if (fmt != ndpi_serialization_format_tlv) + ndpi_serialize_binary_double(&serializer, kbuf, sizeof(kbuf), fuzzed_data.ConsumeFloatingPoint<double>(), "%lf"); + ndpi_serialize_binary_boolean(&serializer, kbuf, sizeof(kbuf), fuzzed_data.ConsumeIntegral<int8_t>()); + d = fuzzed_data.ConsumeBytes<char>(16); + ndpi_serialize_binary_binary(&serializer, kbuf, sizeof(kbuf), d.data(), d.size()); + + if ((i & 0x3) == 0x3) + ndpi_serialize_end_of_record(&serializer); + } + + ndpi_serializer_create_snapshot(&serializer); + + if (fuzzed_data.ConsumeBool()) { + ndpi_serialize_start_of_block(&serializer, "Block"); + memset(kbuf, '\0', sizeof(kbuf)); /* It is also used as binary key */ + snprintf(kbuf, sizeof(kbuf), "K-Ignored"); + ndpi_serialize_uint32_uint32(&serializer, i, fuzzed_data.ConsumeIntegral<u_int32_t>()); + ndpi_serialize_string_string(&serializer, kbuf, fuzzed_data.ConsumeBytesAsString(8).c_str()); + ndpi_serialize_string_float(&serializer, kbuf, fuzzed_data.ConsumeFloatingPoint<float>(), "%f"); + ndpi_serialize_binary_boolean(&serializer, kbuf, sizeof(kbuf), fuzzed_data.ConsumeIntegral<int8_t>()); + ndpi_serialize_end_of_block(&serializer); + } + + if (fuzzed_data.ConsumeBool()) { + ndpi_serialize_start_of_block_uint32(&serializer, 0); + memset(kbuf, '\0', sizeof(kbuf)); /* It is also used as binary key */ + snprintf(kbuf, sizeof(kbuf), "K32-Ignored"); + ndpi_serialize_uint32_uint32(&serializer, i, fuzzed_data.ConsumeIntegral<u_int32_t>()); + ndpi_serialize_string_string(&serializer, kbuf, fuzzed_data.ConsumeBytesAsString(8).c_str()); + ndpi_serialize_string_float(&serializer, kbuf, fuzzed_data.ConsumeFloatingPoint<float>(), "%f"); + ndpi_serialize_binary_boolean(&serializer, kbuf, sizeof(kbuf), fuzzed_data.ConsumeIntegral<int8_t>()); + ndpi_serialize_end_of_block(&serializer); + } + + if (fuzzed_data.ConsumeBool()) + ndpi_serializer_rollback_snapshot(&serializer); + + if (fmt == ndpi_serialization_format_json) { + + ndpi_serialize_start_of_list(&serializer, "List"); + + num_iteration = fuzzed_data.ConsumeIntegralInRange(0, 8); + for (i = 0; i < num_iteration; i++) { + memset(kbuf, '\0', sizeof(kbuf)); /* It is also used as binary key */ + snprintf(kbuf, sizeof(kbuf), "Ignored"); + ndpi_serialize_uint32_uint32(&serializer, i, fuzzed_data.ConsumeIntegral<u_int32_t>()); + ndpi_serialize_string_string(&serializer, kbuf, fuzzed_data.ConsumeBytesAsString(8).c_str()); + ndpi_serialize_string_float(&serializer, kbuf, fuzzed_data.ConsumeFloatingPoint<float>(), "%f"); + ndpi_serialize_binary_boolean(&serializer, kbuf, sizeof(kbuf), fuzzed_data.ConsumeIntegral<int8_t>()); + } + + ndpi_serialize_end_of_list(&serializer); + ndpi_serialize_string_string(&serializer, "Last", "Ok"); + } else if (fmt == ndpi_serialization_format_csv) { + ndpi_serializer_get_header(&serializer, &buffer_len); + ndpi_serializer_get_buffer(&serializer, &buffer_len); + } else { + /* Conversion from tlv to json */ + rc = ndpi_init_deserializer(&deserializer, &serializer); + if (rc == 0) { + rc = ndpi_init_serializer_ll(&serializer_cloned, ndpi_serialization_format_json, fuzzed_data.ConsumeIntegralInRange(0, 2048)); + if (rc == 0) { + ndpi_deserialize_clone_all(&deserializer, &serializer_cloned); + ndpi_serializer_get_buffer(&serializer_cloned, &buffer_len); + ndpi_term_serializer(&serializer_cloned); + } + } + } + + ndpi_term_serializer(&serializer); + + return 0; +} diff --git a/src/include/ndpi_api.h b/src/include/ndpi_api.h index d9e48047f..9968e9eb3 100644 --- a/src/include/ndpi_api.h +++ b/src/include/ndpi_api.h @@ -1253,6 +1253,16 @@ extern "C" { * @param serializer The serializer handle * @param key The field name or ID * @param value The field value + * @param format The float value format + * @return 0 on success, a negative number otherwise + */ + int ndpi_serialize_uint32_double(ndpi_serializer *serializer, u_int32_t key, double value, const char *format /* e.f. "%.2f" */); + + /** + * Serialize a 32-bit unsigned int key and a double value + * @param serializer The serializer handle + * @param key The field name or ID + * @param value The field value * @param format The double value format * @return 0 on success, a negative number otherwise */ @@ -1277,6 +1287,16 @@ extern "C" { int ndpi_serialize_uint32_boolean(ndpi_serializer *serializer, u_int32_t key, u_int8_t value); /** + * Serialize a 32-bit unsigned int and an unterminated string value + * @param serializer The serializer handle + * @param key The field name or ID + * @param value The field value + * @param vlen The value length + * @return 0 on success, a negative number otherwise + */ + int ndpi_serialize_uint32_binary(ndpi_serializer *serializer, u_int32_t key, const char *_value, u_int16_t vlen); + + /** * Serialize an unterminated string key and a 32-bit signed int value * @param serializer The serializer handle * @param key The field name or ID diff --git a/src/lib/ndpi_serializer.c b/src/lib/ndpi_serializer.c index f8652dbc3..de7b2fd7c 100644 --- a/src/lib/ndpi_serializer.c +++ b/src/lib/ndpi_serializer.c @@ -217,7 +217,8 @@ int ndpi_init_serializer_ll(ndpi_serializer *_serializer, serializer->fmt = fmt; - if (ndpi_init_serializer_buffer(&serializer->buffer, buffer_size) != 0) + if (buffer_size < 3 || + ndpi_init_serializer_buffer(&serializer->buffer, buffer_size) != 0) return(-1); if(serializer->fmt == ndpi_serialization_format_json) { @@ -267,7 +268,7 @@ static inline int ndpi_extend_serializer_buffer(ndpi_private_serializer_buffer * new_size = buffer->size + min_len; new_size = ((new_size / 4) + 1) * 4; /* required by zmq encryption */ - r = realloc((void *) buffer->data, new_size); + r = ndpi_realloc((void *) buffer->data, buffer->size, new_size); if(r == NULL) return(-1); @@ -735,18 +736,27 @@ static inline void ndpi_serialize_json_pre(ndpi_serializer *_serializer) { /* ********************************** */ -static inline void ndpi_serialize_json_post(ndpi_serializer *_serializer) { +static inline int ndpi_serialize_json_post(ndpi_serializer *_serializer) { ndpi_private_serializer *serializer = (ndpi_private_serializer*)_serializer; - if(serializer->status.flags & NDPI_SERIALIZER_STATUS_LIST) + if(serializer->status.flags & NDPI_SERIALIZER_STATUS_LIST) { + if(serializer->status.buffer.size_used >= serializer->buffer.size) + return -1; serializer->buffer.data[serializer->status.buffer.size_used++] = ']'; + } + if(serializer->status.buffer.size_used >= serializer->buffer.size) + return -1; serializer->buffer.data[serializer->status.buffer.size_used++] = '}'; - if(serializer->status.flags & NDPI_SERIALIZER_STATUS_ARRAY) + if(serializer->status.flags & NDPI_SERIALIZER_STATUS_ARRAY) { + if(serializer->status.buffer.size_used >= serializer->buffer.size) + return -1; serializer->buffer.data[serializer->status.buffer.size_used++] = ']'; + } serializer->status.flags |= NDPI_SERIALIZER_STATUS_COMMA; + return 0; } /* ********************************** */ @@ -774,6 +784,7 @@ int ndpi_serialize_uint32_uint32(ndpi_serializer *_serializer, u_int32_t key, u_int32_t value) { ndpi_private_serializer *serializer = (ndpi_private_serializer*)_serializer; u_int32_t buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; + int rc; u_int16_t needed = sizeof(u_int8_t) /* type */ + sizeof(u_int32_t) /* key */ + @@ -790,26 +801,37 @@ int ndpi_serialize_uint32_uint32(ndpi_serializer *_serializer, if(serializer->fmt == ndpi_serialization_format_json) { ndpi_serialize_json_pre(_serializer); + buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; if (!(serializer->status.flags & NDPI_SERIALIZER_STATUS_LIST)) { - serializer->status.buffer.size_used += ndpi_snprintf((char *) + rc = ndpi_snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, "\"%u\":", key); + if(rc < 0 || (u_int)rc >= buff_diff) + return(-1); + serializer->status.buffer.size_used += rc; buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; } - serializer->status.buffer.size_used += ndpi_snprintf((char *) + rc = ndpi_snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, "%u", value); + if(rc < 0 || (u_int)rc >= buff_diff) + return(-1); + serializer->status.buffer.size_used += rc; - ndpi_serialize_json_post(_serializer); + if(ndpi_serialize_json_post(_serializer) != 0) + return(-1); } else if(serializer->fmt == ndpi_serialization_format_csv) { if (ndpi_serializer_header_uint32(serializer, key) < 0) return(-1); ndpi_serialize_csv_pre(serializer); buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; - serializer->status.buffer.size_used += ndpi_snprintf((char *) + rc = ndpi_snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, "%u", value); + if(rc < 0 || (u_int)rc >= buff_diff) + return(-1); + serializer->status.buffer.size_used += rc; } else { ndpi_serialization_type kt; u_int8_t type = 0; @@ -846,6 +868,7 @@ int ndpi_serialize_uint32_uint64(ndpi_serializer *_serializer, sizeof(u_int8_t) /* type */ + sizeof(u_int32_t) /* key */ + sizeof(u_int64_t); + int rc; if(serializer->fmt == ndpi_serialization_format_json) needed += 32; @@ -858,26 +881,37 @@ int ndpi_serialize_uint32_uint64(ndpi_serializer *_serializer, if(serializer->fmt == ndpi_serialization_format_json) { ndpi_serialize_json_pre(_serializer); + buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; if (!(serializer->status.flags & NDPI_SERIALIZER_STATUS_LIST)) { - serializer->status.buffer.size_used += ndpi_snprintf((char *) + rc = ndpi_snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, "\"%u\":", key); + if(rc < 0 || (u_int)rc >= buff_diff) + return(-1); + serializer->status.buffer.size_used += rc; buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; } - serializer->status.buffer.size_used += ndpi_snprintf((char *) + rc = ndpi_snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, NDPI_U64_FORMAT, (unsigned long long)value); + if(rc < 0 || (u_int)rc >= buff_diff) + return(-1); + serializer->status.buffer.size_used += rc; - ndpi_serialize_json_post(_serializer); + if(ndpi_serialize_json_post(_serializer) != 0) + return(-1); } else if(serializer->fmt == ndpi_serialization_format_csv) { if (ndpi_serializer_header_uint32(serializer, key) < 0) return(-1); ndpi_serialize_csv_pre(serializer); buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; - serializer->status.buffer.size_used += ndpi_snprintf((char *) + rc = ndpi_snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, NDPI_U64_FORMAT, (unsigned long long)value); + if(rc < 0 || (u_int)rc >= buff_diff) + return(-1); + serializer->status.buffer.size_used += rc; } else { if(value <= 0xffffffff) { return(ndpi_serialize_uint32_uint32(_serializer, key, value)); @@ -910,6 +944,7 @@ int ndpi_serialize_uint32_int32(ndpi_serializer *_serializer, sizeof(u_int8_t) /* type */ + sizeof(u_int32_t) /* key */ + sizeof(int32_t); + int rc; if(serializer->fmt == ndpi_serialization_format_json) needed += 24; @@ -922,26 +957,37 @@ int ndpi_serialize_uint32_int32(ndpi_serializer *_serializer, if(serializer->fmt == ndpi_serialization_format_json) { ndpi_serialize_json_pre(_serializer); + buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; if (!(serializer->status.flags & NDPI_SERIALIZER_STATUS_LIST)) { - serializer->status.buffer.size_used += ndpi_snprintf((char *) + rc = ndpi_snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, "\"%u\":", key); + if(rc < 0 || (u_int)rc >= buff_diff) + return(-1); + serializer->status.buffer.size_used += rc; buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; } - serializer->status.buffer.size_used += ndpi_snprintf((char *) + rc = ndpi_snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, "%d", value); + if(rc < 0 || (u_int)rc >= buff_diff) + return(-1); + serializer->status.buffer.size_used += rc; - ndpi_serialize_json_post(_serializer); + if(ndpi_serialize_json_post(_serializer) != 0) + return(-1); } else if(serializer->fmt == ndpi_serialization_format_csv) { if (ndpi_serializer_header_uint32(serializer, key) < 0) return(-1); ndpi_serialize_csv_pre(serializer); buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; - serializer->status.buffer.size_used += ndpi_snprintf((char *) + rc = ndpi_snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, "%d", value); + if(rc < 0 || (u_int)rc >= buff_diff) + return(-1); + serializer->status.buffer.size_used += rc; } else { ndpi_serialization_type kt; u_int8_t type = 0; @@ -978,6 +1024,7 @@ int ndpi_serialize_uint32_int64(ndpi_serializer *_serializer, sizeof(u_int8_t) /* type */ + sizeof(u_int32_t) /* key */ + sizeof(int64_t); + int rc; if(serializer->fmt == ndpi_serialization_format_json) needed += 32; @@ -990,26 +1037,37 @@ int ndpi_serialize_uint32_int64(ndpi_serializer *_serializer, if(serializer->fmt == ndpi_serialization_format_json) { ndpi_serialize_json_pre(_serializer); + buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; if (!(serializer->status.flags & NDPI_SERIALIZER_STATUS_LIST)) { - serializer->status.buffer.size_used += ndpi_snprintf((char *) + rc = ndpi_snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, "\"%u\":", key); + if(rc < 0 || (u_int)rc >= buff_diff) + return(-1); + serializer->status.buffer.size_used += rc; buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; } - serializer->status.buffer.size_used += ndpi_snprintf((char *) + rc = ndpi_snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, NDPI_I64_FORMAT, (long long int)value); + if(rc < 0 || (u_int)rc >= buff_diff) + return(-1); + serializer->status.buffer.size_used += rc; - ndpi_serialize_json_post(_serializer); + if(ndpi_serialize_json_post(_serializer) != 0) + return(-1); } else if(serializer->fmt == ndpi_serialization_format_csv) { if (ndpi_serializer_header_uint32(serializer, key) < 0) return(-1); ndpi_serialize_csv_pre(serializer); buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; - serializer->status.buffer.size_used += ndpi_snprintf((char *) + rc = ndpi_snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, NDPI_I64_FORMAT, (long long int)value); + if(rc < 0 || (u_int)rc >= buff_diff) + return(-1); + serializer->status.buffer.size_used += rc; } else { if((value & 0xFFFFFFFF) == value) { @@ -1043,7 +1101,9 @@ int ndpi_serialize_uint32_float(ndpi_serializer *_serializer, u_int16_t needed = sizeof(u_int8_t) /* type */ + sizeof(u_int32_t) /* key */ + - sizeof(float); + sizeof(float) + + 32; /* Safety, because printing float might lead to LONG string */ + int rc; if(serializer->fmt == ndpi_serialization_format_json) needed += 32; @@ -1056,20 +1116,31 @@ int ndpi_serialize_uint32_float(ndpi_serializer *_serializer, if(serializer->fmt == ndpi_serialization_format_json) { ndpi_serialize_json_pre(_serializer); + buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; if (!(serializer->status.flags & NDPI_SERIALIZER_STATUS_LIST)) { - serializer->status.buffer.size_used += ndpi_snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, "\"%u\":", key); + rc = ndpi_snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, "\"%u\":", key); + if(rc < 0 || (u_int)rc >= buff_diff) + return(-1); + serializer->status.buffer.size_used += rc; buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; } - serializer->status.buffer.size_used += ndpi_snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, format, value); + rc = ndpi_snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, format, value); + if(rc < 0 || (u_int)rc >= buff_diff) + return(-1); + serializer->status.buffer.size_used += rc; - ndpi_serialize_json_post(_serializer); + if(ndpi_serialize_json_post(_serializer) != 0) + return(-1); } else if(serializer->fmt == ndpi_serialization_format_csv) { if (ndpi_serializer_header_uint32(serializer, key) < 0) return(-1); ndpi_serialize_csv_pre(serializer); buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; - serializer->status.buffer.size_used += ndpi_snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, format, value); + rc = ndpi_snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, format, value); + if(rc < 0 || (u_int)rc >= buff_diff) + return(-1); + serializer->status.buffer.size_used += rc; } else { ndpi_serialization_type kt; @@ -1091,8 +1162,81 @@ int ndpi_serialize_uint32_float(ndpi_serializer *_serializer, /* ********************************** */ -static int ndpi_serialize_uint32_binary(ndpi_serializer *_serializer, - u_int32_t key, const char *value, u_int16_t slen) { +int ndpi_serialize_uint32_double(ndpi_serializer *_serializer, + u_int32_t key, double value, + const char *format /* e.f. "%.2f" */) { + ndpi_private_serializer *serializer = (ndpi_private_serializer*)_serializer; + u_int32_t buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; + u_int16_t needed = + sizeof(u_int8_t) /* type */ + + sizeof(u_int32_t) /* key */ + + sizeof(double) + + 32; /* Safety, because printing double might lead to LONG string */ + int rc; + + if(serializer->fmt == ndpi_serialization_format_json) + needed += 32; + + if(buff_diff < needed) { + if(ndpi_extend_serializer_buffer(&serializer->buffer, needed - buff_diff) < 0) + return(-1); + buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; + } + + if(serializer->fmt == ndpi_serialization_format_json) { + ndpi_serialize_json_pre(_serializer); + buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; + + if (!(serializer->status.flags & NDPI_SERIALIZER_STATUS_LIST)) { + rc = ndpi_snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, "\"%u\":", key); + if(rc < 0 || (u_int)rc >= buff_diff) + return(-1); + serializer->status.buffer.size_used += rc; + buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; + } + + rc = ndpi_snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, format, value); + if(rc < 0 || (u_int)rc >= buff_diff) + return(-1); + serializer->status.buffer.size_used += rc; + + if(ndpi_serialize_json_post(_serializer) != 0) + return(-1); + } else if(serializer->fmt == ndpi_serialization_format_csv) { + if (ndpi_serializer_header_uint32(serializer, key) < 0) return(-1); + ndpi_serialize_csv_pre(serializer); + buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; + rc = ndpi_snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, format, value); + if(rc < 0 || (u_int)rc >= buff_diff) + return(-1); + serializer->status.buffer.size_used += rc; + + } else { +#if 1 + fprintf(stderr, "TLV serializer does not support double\n"); +#else + ndpi_serialization_type kt; + u_int8_t type = 0; + u_int32_t type_offset = serializer->status.buffer.size_used++; + + kt = ndpi_serialize_key_uint32(serializer, key); + type = (kt << 4); + + ndpi_serialize_single_float(serializer, value); + type |= ndpi_serialization_double; + + serializer->buffer.data[type_offset] = type; +#endif + } + + serializer->status.flags |= NDPI_SERIALIZER_STATUS_NOT_EMPTY; + return(0); +} + +/* ********************************** */ + +int ndpi_serialize_uint32_binary(ndpi_serializer *_serializer, + u_int32_t key, const char *value, u_int16_t slen) { ndpi_private_serializer *serializer = (ndpi_private_serializer*)_serializer; u_int32_t buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; u_int32_t needed = @@ -1100,6 +1244,7 @@ static int ndpi_serialize_uint32_binary(ndpi_serializer *_serializer, sizeof(u_int32_t) /* key */ + sizeof(u_int16_t) /* len */ + slen; + int rc; if(serializer->fmt == ndpi_serialization_format_json) needed += 24 + slen; @@ -1112,23 +1257,31 @@ static int ndpi_serialize_uint32_binary(ndpi_serializer *_serializer, if(serializer->fmt == ndpi_serialization_format_json) { ndpi_serialize_json_pre(_serializer); + buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; if (!(serializer->status.flags & NDPI_SERIALIZER_STATUS_LIST)) { - serializer->status.buffer.size_used += ndpi_snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], + rc = ndpi_snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, "\"%u\":", key); + if(rc < 0 || (u_int)rc >= buff_diff) + return(-1); + serializer->status.buffer.size_used += rc; buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; } serializer->status.buffer.size_used += ndpi_json_string_escape(value, slen, (char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff); buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; - ndpi_serialize_json_post(_serializer); + if(ndpi_serialize_json_post(_serializer) != 0) + return(-1); } else if(serializer->fmt == ndpi_serialization_format_csv) { if (ndpi_serializer_header_uint32(serializer, key) < 0) return(-1); ndpi_serialize_csv_pre(serializer); buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; - serializer->status.buffer.size_used += ndpi_snprintf((char *) - &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, - "%s", value); + rc = ndpi_snprintf((char *) + &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, + "%.*s", slen, value); + if(rc < 0 || (u_int)rc >= buff_diff) + return(-1); + serializer->status.buffer.size_used += rc; } else { ndpi_serialization_type kt; u_int8_t type = 0; @@ -1162,6 +1315,7 @@ int ndpi_serialize_uint32_boolean(ndpi_serializer *_serializer, ndpi_private_serializer *serializer = (ndpi_private_serializer*)_serializer; u_int32_t buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; u_int32_t needed = 24; + int rc; if(serializer->fmt != ndpi_serialization_format_json && serializer->fmt != ndpi_serialization_format_csv) @@ -1175,26 +1329,37 @@ int ndpi_serialize_uint32_boolean(ndpi_serializer *_serializer, if(serializer->fmt == ndpi_serialization_format_json) { ndpi_serialize_json_pre(_serializer); + buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; if (!(serializer->status.flags & NDPI_SERIALIZER_STATUS_LIST)) { - serializer->status.buffer.size_used += ndpi_snprintf((char *) + rc = ndpi_snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, "\"%u\":", key); + if(rc < 0 || (u_int)rc >= buff_diff) + return(-1); + serializer->status.buffer.size_used += rc; buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; } - serializer->status.buffer.size_used += ndpi_snprintf((char *) + rc = ndpi_snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, "%s", value ? "true" : "false"); + if(rc < 0 || (u_int)rc >= buff_diff) + return(-1); + serializer->status.buffer.size_used += rc; - ndpi_serialize_json_post(_serializer); + if(ndpi_serialize_json_post(_serializer) != 0) + return(-1); } else if(serializer->fmt == ndpi_serialization_format_csv) { if (ndpi_serializer_header_uint32(serializer, key) < 0) return(-1); ndpi_serialize_csv_pre(serializer); buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; - serializer->status.buffer.size_used += ndpi_snprintf((char *) + rc = ndpi_snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, "%s", value ? "true" : "false"); + if(rc < 0 || (u_int)rc >= buff_diff) + return(-1); + serializer->status.buffer.size_used += rc; } serializer->status.flags |= NDPI_SERIALIZER_STATUS_NOT_EMPTY; @@ -1209,6 +1374,7 @@ int ndpi_serialize_binary_int32(ndpi_serializer *_serializer, ndpi_private_serializer *serializer = (ndpi_private_serializer*)_serializer; u_int32_t buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; u_int32_t needed; + int rc; #ifdef OPTIMIZE_NUMERIC_KEYS if(ndpi_is_number(key, klen)) @@ -1232,6 +1398,7 @@ int ndpi_serialize_binary_int32(ndpi_serializer *_serializer, if(serializer->fmt == ndpi_serialization_format_json) { ndpi_serialize_json_pre(_serializer); + buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; if (!(serializer->status.flags & NDPI_SERIALIZER_STATUS_LIST)) { serializer->status.buffer.size_used += ndpi_json_string_escape(key, klen, @@ -1241,17 +1408,24 @@ int ndpi_serialize_binary_int32(ndpi_serializer *_serializer, buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; } - serializer->status.buffer.size_used += ndpi_snprintf((char *) + rc = ndpi_snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, "%d", value); + if(rc < 0 || (u_int)rc >= buff_diff) + return(-1); + serializer->status.buffer.size_used += rc; - ndpi_serialize_json_post(_serializer); + if(ndpi_serialize_json_post(_serializer) != 0) + return(-1); } else if(serializer->fmt == ndpi_serialization_format_csv) { if (ndpi_serializer_header_string(serializer, key, klen) < 0) return(-1); ndpi_serialize_csv_pre(serializer); buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; - serializer->status.buffer.size_used += ndpi_snprintf((char *) + rc = ndpi_snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, "%d", value); + if(rc < 0 || (u_int)rc >= buff_diff) + return(-1); + serializer->status.buffer.size_used += rc; } else { if(value <= 127 && value >= -128) { serializer->buffer.data[serializer->status.buffer.size_used++] = (ndpi_serialization_string << 4) | ndpi_serialization_int8; @@ -1304,8 +1478,9 @@ int ndpi_serialize_string_int32(ndpi_serializer *_serializer, rc = ndpi_snprintf((char*)&serializer->buffer.data[serializer->status.buffer.size_used], needed, "%u", value); - if(rc > 0) - serializer->status.buffer.size_used += rc; + if(rc < 0 || (u_int)rc >= buff_diff) + return(-1); + serializer->status.buffer.size_used += rc; return(0); } else #endif @@ -1320,6 +1495,7 @@ int ndpi_serialize_binary_int64(ndpi_serializer *_serializer, ndpi_private_serializer *serializer = (ndpi_private_serializer*)_serializer; u_int32_t buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; u_int32_t needed; + int rc; #ifdef OPTIMIZE_NUMERIC_KEYS if(ndpi_is_number(key, klen)) @@ -1330,7 +1506,7 @@ int ndpi_serialize_binary_int64(ndpi_serializer *_serializer, sizeof(u_int8_t) /* type */ + sizeof(u_int16_t) /* key len */ + klen /* key */ + - sizeof(u_int32_t); + sizeof(u_int64_t); if(serializer->fmt == ndpi_serialization_format_json) needed += 16 + klen; @@ -1343,6 +1519,7 @@ int ndpi_serialize_binary_int64(ndpi_serializer *_serializer, if(serializer->fmt == ndpi_serialization_format_json) { ndpi_serialize_json_pre(_serializer); + buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; if (!(serializer->status.flags & NDPI_SERIALIZER_STATUS_LIST)) { serializer->status.buffer.size_used += ndpi_json_string_escape(key, klen, @@ -1353,17 +1530,24 @@ int ndpi_serialize_binary_int64(ndpi_serializer *_serializer, buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; } - serializer->status.buffer.size_used += ndpi_snprintf((char *) + rc = ndpi_snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, NDPI_I64_FORMAT, (long long int)value); + if(rc < 0 || (u_int)rc >= buff_diff) + return(-1); + serializer->status.buffer.size_used += rc; - ndpi_serialize_json_post(_serializer); + if(ndpi_serialize_json_post(_serializer) != 0) + return(-1); } else if(serializer->fmt == ndpi_serialization_format_csv) { if (ndpi_serializer_header_string(serializer, key, klen) < 0) return(-1); ndpi_serialize_csv_pre(serializer); buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; - serializer->status.buffer.size_used += ndpi_snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, + rc = ndpi_snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, NDPI_I64_FORMAT, (long long int)value); + if(rc < 0 || (u_int)rc >= buff_diff) + return(-1); + serializer->status.buffer.size_used += rc; } else { if ((value & 0xFFFFFFFF) == value) { return(ndpi_serialize_string_int32(_serializer, key, value)); @@ -1392,6 +1576,7 @@ int ndpi_serialize_binary_uint32(ndpi_serializer *_serializer, ndpi_private_serializer *serializer = (ndpi_private_serializer*)_serializer; u_int32_t buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; u_int32_t needed; + int rc; #ifdef OPTIMIZE_CSV_SERIALIZATION if(serializer->fmt == ndpi_serialization_format_csv) { @@ -1444,6 +1629,7 @@ int ndpi_serialize_binary_uint32(ndpi_serializer *_serializer, if(serializer->fmt == ndpi_serialization_format_json) { ndpi_serialize_json_pre(_serializer); + buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; if (!(serializer->status.flags & NDPI_SERIALIZER_STATUS_LIST)) { serializer->status.buffer.size_used += ndpi_json_string_escape(key, klen, @@ -1454,18 +1640,25 @@ int ndpi_serialize_binary_uint32(ndpi_serializer *_serializer, buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; } - serializer->status.buffer.size_used += ndpi_snprintf((char *) - &serializer->buffer.data[serializer->status.buffer.size_used], - buff_diff, "%u", value); + rc = ndpi_snprintf((char *) + &serializer->buffer.data[serializer->status.buffer.size_used], + buff_diff, "%u", value); + if(rc < 0 || (u_int)rc >= buff_diff) + return(-1); + serializer->status.buffer.size_used += rc; - ndpi_serialize_json_post(_serializer); + if(ndpi_serialize_json_post(_serializer) != 0) + return(-1); } else if(serializer->fmt == ndpi_serialization_format_csv) { if (ndpi_serializer_header_string(serializer, key, klen) < 0) return(-1); ndpi_serialize_csv_pre(serializer); buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; - serializer->status.buffer.size_used += ndpi_snprintf((char *) - &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, - "%u", value); + rc = ndpi_snprintf((char *) + &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, + "%u", value); + if(rc < 0 || (u_int)rc >= buff_diff) + return(-1); + serializer->status.buffer.size_used += rc; } else { if(value <= 0xff) { serializer->buffer.data[serializer->status.buffer.size_used++] = (ndpi_serialization_string << 4) | ndpi_serialization_uint8; @@ -1523,6 +1716,7 @@ int ndpi_serialize_binary_uint64(ndpi_serializer *_serializer, ndpi_private_serializer *serializer = (ndpi_private_serializer*)_serializer; u_int32_t buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; u_int32_t needed; + int rc; #ifdef OPTIMIZE_NUMERIC_KEYS if(ndpi_is_number(key, klen)) @@ -1536,7 +1730,7 @@ int ndpi_serialize_binary_uint64(ndpi_serializer *_serializer, sizeof(u_int64_t); if(serializer->fmt == ndpi_serialization_format_json) - needed += 32 + klen; + needed += 16 + klen; if(buff_diff < needed) { if(ndpi_extend_serializer_buffer(&serializer->buffer, needed - buff_diff) < 0) @@ -1546,6 +1740,7 @@ int ndpi_serialize_binary_uint64(ndpi_serializer *_serializer, if(serializer->fmt == ndpi_serialization_format_json) { ndpi_serialize_json_pre(_serializer); + buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; if (!(serializer->status.flags & NDPI_SERIALIZER_STATUS_LIST)) { serializer->status.buffer.size_used += ndpi_json_string_escape(key, klen, @@ -1556,18 +1751,25 @@ int ndpi_serialize_binary_uint64(ndpi_serializer *_serializer, buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; } - serializer->status.buffer.size_used += ndpi_snprintf((char *) + rc = ndpi_snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, NDPI_U64_FORMAT, (unsigned long long)value); + if(rc < 0 || (u_int)rc >= buff_diff) + return(-1); + serializer->status.buffer.size_used += rc; - ndpi_serialize_json_post(_serializer); + if(ndpi_serialize_json_post(_serializer) != 0) + return(-1); } else if(serializer->fmt == ndpi_serialization_format_csv) { if (ndpi_serializer_header_string(serializer, key, klen) < 0) return(-1); ndpi_serialize_csv_pre(serializer); buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; - serializer->status.buffer.size_used += ndpi_snprintf((char *) + rc = ndpi_snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, NDPI_U64_FORMAT, (unsigned long long)value); + if(rc < 0 || (u_int)rc >= buff_diff) + return(-1); + serializer->status.buffer.size_used += rc; } else { if(value <= 0xffffffff) { return(ndpi_serialize_string_uint32(_serializer, key, value)); @@ -1599,6 +1801,7 @@ int ndpi_serialize_binary_float(ndpi_serializer *_serializer, ndpi_private_serializer *serializer = (ndpi_private_serializer*)_serializer; u_int32_t buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; u_int32_t needed; + int rc; #ifdef OPTIMIZE_NUMERIC_KEYS if(ndpi_is_number(key, klen)) @@ -1609,7 +1812,8 @@ int ndpi_serialize_binary_float(ndpi_serializer *_serializer, sizeof(u_int8_t) /* type */ + sizeof(u_int16_t) /* key len */ + klen /* key */ + - sizeof(float); + sizeof(float) + + 32; /* Safety, because printing float might lead to LONG string */ if(serializer->fmt == ndpi_serialization_format_json) needed += 32 + klen; @@ -1622,6 +1826,7 @@ int ndpi_serialize_binary_float(ndpi_serializer *_serializer, if(serializer->fmt == ndpi_serialization_format_json) { ndpi_serialize_json_pre(_serializer); + buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; if (!(serializer->status.flags & NDPI_SERIALIZER_STATUS_LIST)) { serializer->status.buffer.size_used += ndpi_json_string_escape(key, klen, @@ -1631,14 +1836,21 @@ int ndpi_serialize_binary_float(ndpi_serializer *_serializer, buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; } - serializer->status.buffer.size_used += ndpi_snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, format, value); + rc = ndpi_snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, format, value); + if(rc < 0 || (u_int)rc >= buff_diff) + return(-1); + serializer->status.buffer.size_used += rc; - ndpi_serialize_json_post(_serializer); + if(ndpi_serialize_json_post(_serializer) != 0) + return(-1); } else if(serializer->fmt == ndpi_serialization_format_csv) { if (ndpi_serializer_header_string(serializer, key, klen) < 0) return(-1); ndpi_serialize_csv_pre(serializer); buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; - serializer->status.buffer.size_used += ndpi_snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, format, value); + rc = ndpi_snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, format, value); + if(rc < 0 || (u_int)rc >= buff_diff) + return(-1); + serializer->status.buffer.size_used += rc; } else { serializer->buffer.data[serializer->status.buffer.size_used++] = (ndpi_serialization_string << 4) | ndpi_serialization_float; @@ -1661,12 +1873,14 @@ int ndpi_serialize_binary_double(ndpi_serializer *_serializer, ndpi_private_serializer *serializer = (ndpi_private_serializer*)_serializer; u_int32_t buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; u_int32_t needed; + int rc; needed = sizeof(u_int8_t) /* type */ + sizeof(u_int16_t) /* key len */ + klen /* key */ + - sizeof(double); + sizeof(double) + + 32; /* Safety, because printing double might lead to LONG string */ if(serializer->fmt == ndpi_serialization_format_json) needed += 32 + klen; @@ -1679,6 +1893,7 @@ int ndpi_serialize_binary_double(ndpi_serializer *_serializer, if(serializer->fmt == ndpi_serialization_format_json) { ndpi_serialize_json_pre(_serializer); + buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; if (!(serializer->status.flags & NDPI_SERIALIZER_STATUS_LIST)) { serializer->status.buffer.size_used += ndpi_json_string_escape(key, klen, @@ -1688,14 +1903,21 @@ int ndpi_serialize_binary_double(ndpi_serializer *_serializer, buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; } - serializer->status.buffer.size_used += ndpi_snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, format, value); + rc = ndpi_snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, format, value); + if(rc < 0 || (u_int)rc >= buff_diff) + return(-1); + serializer->status.buffer.size_used += rc; - ndpi_serialize_json_post(_serializer); + if(ndpi_serialize_json_post(_serializer) != 0) + return(-1); } else if(serializer->fmt == ndpi_serialization_format_csv) { if (ndpi_serializer_header_string(serializer, key, klen) < 0) return(-1); ndpi_serialize_csv_pre(serializer); buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; - serializer->status.buffer.size_used += ndpi_snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, format, value); + rc = ndpi_snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, format, value); + if(rc < 0 || (u_int)rc >= buff_diff) + return(-1); + serializer->status.buffer.size_used += rc; } else { #if 1 fprintf(stderr, "TLV serializer does not support double\n"); @@ -1761,6 +1983,7 @@ static int ndpi_serialize_binary_raw(ndpi_serializer *_serializer, if(serializer->fmt == ndpi_serialization_format_json) { ndpi_serialize_json_pre(_serializer); + buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; if (!(serializer->status.flags & NDPI_SERIALIZER_STATUS_LIST)) { serializer->status.buffer.size_used += ndpi_json_string_escape(key, klen, @@ -1778,7 +2001,8 @@ static int ndpi_serialize_binary_raw(ndpi_serializer *_serializer, serializer->status.buffer.size_used += vlen; } - ndpi_serialize_json_post(_serializer); + if(ndpi_serialize_json_post(_serializer) != 0) + return(-1); } else if(serializer->fmt == ndpi_serialization_format_csv) { if (ndpi_serializer_header_string(serializer, key, klen) < 0) return(-1); ndpi_serialize_csv_pre(serializer); @@ -1886,6 +2110,7 @@ int ndpi_serialize_binary_boolean(ndpi_serializer *_serializer, ndpi_private_serializer *serializer = (ndpi_private_serializer*)_serializer; u_int32_t buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; u_int32_t needed; + int rc; if(serializer->fmt != ndpi_serialization_format_json && serializer->fmt != ndpi_serialization_format_csv) @@ -1906,6 +2131,7 @@ int ndpi_serialize_binary_boolean(ndpi_serializer *_serializer, if(serializer->fmt == ndpi_serialization_format_json) { ndpi_serialize_json_pre(_serializer); + buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; if (!(serializer->status.flags & NDPI_SERIALIZER_STATUS_LIST)) { serializer->status.buffer.size_used += ndpi_json_string_escape(key, klen, @@ -1915,17 +2141,24 @@ int ndpi_serialize_binary_boolean(ndpi_serializer *_serializer, buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; } - serializer->status.buffer.size_used += ndpi_snprintf((char *) + rc = ndpi_snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, "%s", value ? "true" : "false"); + if(rc < 0 || (u_int)rc >= buff_diff) + return(-1); + serializer->status.buffer.size_used += rc; - ndpi_serialize_json_post(_serializer); + if(ndpi_serialize_json_post(_serializer) != 0) + return(-1); } else if(serializer->fmt == ndpi_serialization_format_csv) { if (ndpi_serializer_header_string(serializer, key, strlen(key)) < 0) return(-1); ndpi_serialize_csv_pre(serializer); buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; - serializer->status.buffer.size_used += ndpi_snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, + rc = ndpi_snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, "%s", value ? "true" : "false"); + if(rc < 0 || (u_int)rc >= buff_diff) + return(-1); + serializer->status.buffer.size_used += rc; } serializer->status.flags |= NDPI_SERIALIZER_STATUS_NOT_EMPTY; @@ -1946,6 +2179,7 @@ int ndpi_serialize_start_of_list_binary(ndpi_serializer *_serializer, ndpi_private_serializer *serializer = (ndpi_private_serializer*)_serializer; u_int32_t buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; u_int32_t needed; + int rc; if(serializer->fmt != ndpi_serialization_format_json && serializer->fmt != ndpi_serialization_format_tlv) @@ -1961,17 +2195,22 @@ int ndpi_serialize_start_of_list_binary(ndpi_serializer *_serializer, if (serializer->fmt == ndpi_serialization_format_json) { ndpi_serialize_json_pre(_serializer); + buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; serializer->status.buffer.size_used += ndpi_json_string_escape(key, klen, (char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff); buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; - serializer->status.buffer.size_used += ndpi_snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, ": ["); + rc = ndpi_snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, ": ["); + if(rc < 0 || (u_int)rc >= buff_diff) + return(-1); + serializer->status.buffer.size_used += rc; serializer->status.flags |= NDPI_SERIALIZER_STATUS_LIST | NDPI_SERIALIZER_STATUS_SOL; - ndpi_serialize_json_post(_serializer); + if(ndpi_serialize_json_post(_serializer) != 0) + return(-1); } else { serializer->buffer.data[serializer->status.buffer.size_used++] = ndpi_serialization_start_of_list; ndpi_serialize_single_string(serializer, key, klen); @@ -2021,6 +2260,7 @@ int ndpi_serialize_start_of_block_binary(ndpi_serializer *_serializer, ndpi_private_serializer *serializer = (ndpi_private_serializer*)_serializer; u_int32_t buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; u_int32_t needed; + int rc; if(serializer->fmt != ndpi_serialization_format_json && serializer->fmt != ndpi_serialization_format_tlv) @@ -2036,12 +2276,18 @@ int ndpi_serialize_start_of_block_binary(ndpi_serializer *_serializer, if (serializer->fmt == ndpi_serialization_format_json) { ndpi_serialize_json_pre(_serializer); + buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; + serializer->status.buffer.size_used += ndpi_json_string_escape(key, klen, (char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff); buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; - serializer->status.buffer.size_used += ndpi_snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, ": {"); + rc = ndpi_snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, ": {"); + if(rc < 0 || (u_int)rc >= buff_diff) + return(-1); + serializer->status.buffer.size_used += rc; buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; - ndpi_serialize_json_post(_serializer); + if(ndpi_serialize_json_post(_serializer) != 0) + return(-1); serializer->status.flags |= NDPI_SERIALIZER_STATUS_SOB; } else /* ndpi_serialization_format_tlv */ { @@ -2104,7 +2350,8 @@ int ndpi_serialize_end_of_block(ndpi_serializer *_serializer) { serializer->status.flags &= ~NDPI_SERIALIZER_STATUS_SOB; // buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; - ndpi_serialize_json_post(_serializer); + if(ndpi_serialize_json_post(_serializer) != 0) + return(-1); } else { serializer->buffer.data[serializer->status.buffer.size_used++] = ndpi_serialization_end_of_block; } diff --git a/tests/unit/unit.c b/tests/unit/unit.c index 440ffadf4..5212c768e 100644 --- a/tests/unit/unit.c +++ b/tests/unit/unit.c @@ -65,7 +65,7 @@ static int verbose = 0; #define FLT_MAX 3.402823466e+38F int serializerUnitTest() { - ndpi_serializer serializer, deserializer; + ndpi_serializer serializer, serializer_cloned, deserializer; int i, loop_id; ndpi_serialization_format fmt = {0}; u_int32_t buffer_len; @@ -74,6 +74,7 @@ int serializerUnitTest() { json_object *j; memset(&serializer, 0, sizeof(serializer)); + memset(&serializer_cloned, 0, sizeof(serializer_cloned)); memset(&deserializer, 0, sizeof(deserializer)); for(loop_id=0; loop_id<3; loop_id++) { @@ -234,6 +235,18 @@ int serializerUnitTest() { ndpi_deserialize_next(&deserializer); } + + /* Converting from TLV to JSON */ + + assert(ndpi_init_deserializer(&deserializer, &serializer) != -1); + assert(ndpi_init_serializer(&serializer_cloned, ndpi_serialization_format_json) != -1); + assert(ndpi_deserialize_clone_all(&deserializer, &serializer_cloned) == 0); + + buffer = ndpi_serializer_get_buffer(&serializer_cloned, &buffer_len); + if(verbose) + printf("TLV->JSON: %s\n", buffer); + + ndpi_term_serializer(&serializer_cloned); } ndpi_term_serializer(&serializer); |