aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Nardi <12729895+IvanNardi@users.noreply.github.com>2023-01-27 07:09:18 +0100
committerGitHub <noreply@github.com>2023-01-27 07:09:18 +0100
commit6d00a9e0bd4cdb2be26577f53b75b3078cefd4c3 (patch)
tree327e7d1bc8e89a990e99ea8cfb4a748c80d12f32
parenteea99564308fffca675918506a6e12f7a4f71a6f (diff)
fuzz: add a new fuzzer to test serialization/deserialization code (#1876)
Autodetecting the needed buffer size is quite complex (especially with float/double values) so it is mandatory to properly check for `ndpi_snprintf` truncation. These issues have been undetected so far probably because the default buffer is big enough for all common cases. Add an example of usage of `ndpi_deserialize_clone_all()` (taken from `ntopng`)
-rw-r--r--.github/workflows/cifuzz.yml2
-rw-r--r--.gitignore2
-rw-r--r--fuzz/Makefile.am25
-rw-r--r--fuzz/corpus/fuzz_serialization/0067200701e9b0b5ec3db13f387a75e9e82202b0bin0 -> 34 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/00ba573f9435b38d7205d995bbfe1813add81ab3bin0 -> 337 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/0228f43998915b3c03c642cadacb0fc9f34ad80f1
-rw-r--r--fuzz/corpus/fuzz_serialization/03e684ba5d7a6306ddfb1dd15f40f2c4a1a074eebin0 -> 15 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/07d9e6281c5355f19da85e221fc562ec2d877e3bbin0 -> 144 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/07dda5cbda20802250efce051169313efcc19c91bin0 -> 540 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/0826de64028c8e890d2c9f95ee0ac3180ad45431bin0 -> 9 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/09251a8df7e23a0e332eb0beee7afdec7e48fc7dbin0 -> 561 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/0cf7de690bf6e03f2843688fef7e5fa6f8f5b50a1
-rw-r--r--fuzz/corpus/fuzz_serialization/0f6e2d10bdff7d0f0f6ce142c9fa4d2a22d39fdb1
-rw-r--r--fuzz/corpus/fuzz_serialization/1019a3c07fe32d6fab2e673671f557717d4997d7bin0 -> 65 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/102b9366042c4c2ada3408c1808bc8cae19199e6bin0 -> 194 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/111bf62468546c168ac3da1052ec3bf12c51d927bin0 -> 74 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/123959e688316f1156b5fd63115e66990691dab8bin0 -> 343 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/1599e9fa41ec68c80230491902786bee889f5bcb1
-rw-r--r--fuzz/corpus/fuzz_serialization/1799f48cfbb2ab6b1110385ff98bb8c46313cdecbin0 -> 5 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/1835e91fe48390e58af954a32fd7c76f31bd9589bin0 -> 748 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/1a8f29ec0d35809a410d5491f71238139e481538bin0 -> 34 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/1af6e9701b53c33f27e958848e077cc8663f2d49bin0 -> 143 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/1b9853e05cb525c5e3f95cc351e6af1d93169e21bin0 -> 2006 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/1c1f0a2fb6bce1b4efad57e900e1dea1884b31b5bin0 -> 1092 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/1d25ea7808bdc1960f4fa0b1265d348157676d341
-rw-r--r--fuzz/corpus/fuzz_serialization/212f0b6f4f250553420c4b462b6adfbca29667e71
-rw-r--r--fuzz/corpus/fuzz_serialization/22180792385106ce0b6ce830e1ff76f431a01c9dbin0 -> 39 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/23d2435c588ac50944b11976815bf162f433e0abbin0 -> 89 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/25885772862548d55ad11ac6b1913a2b7a9f2513bin0 -> 555 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/2c16853a4cc039ea91f734590db769824ae54318bin0 -> 36 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/2f10304d880a3bceb43f89514ff7661474d818f93
-rw-r--r--fuzz/corpus/fuzz_serialization/30fba8556db34f5d467c0d677fe176564b377748bin0 -> 35 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/33a78cbd4539e3757769bb950283c7f8a340f20dbin0 -> 718 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/36a23d77f4380edecd3ba002c371f2e9ebfe4fc2bin0 -> 184 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/38eba3bacca0984d08666561e863d816fae7bd79bin0 -> 426 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/39a7293fe98a37dbd3bb56eafebff914df2e0835bin0 -> 516 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/3a474dedd7c902caa19c0aea83735fe5805b5ae5bin0 -> 76 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/3c49269686ee0c250a2d977a86d965727418ebe0bin0 -> 13 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/3ccc20957ca1de354f0911587f3f6a89bf639bbe1
-rw-r--r--fuzz/corpus/fuzz_serialization/3eec95f5cdf41fd6200a215e24d60f3bede4fa18bin0 -> 172 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/44613cadc2a119c0445d8aca742ddaa6e9d14f151
-rw-r--r--fuzz/corpus/fuzz_serialization/44c16af83b7bfe485630ec7417a8a93dd6a4f344bin0 -> 7 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/4599f42df4bd96e578ca04c9f530bce55f85c5931
-rw-r--r--fuzz/corpus/fuzz_serialization/46220eb9c32d8f39af7842340be4410bbc6b0acf1
-rw-r--r--fuzz/corpus/fuzz_serialization/47102208d3296068fd9d922e8794d5614bf673b41
-rw-r--r--fuzz/corpus/fuzz_serialization/485ffdac621c7a2fe64c49a9d43218c4297b0291bin0 -> 1781 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/4a3ac753e86aee22a1fba2144d452def73f5d445bin0 -> 2211 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/4a4cc4a8eea5e60045f94339f31c6a70a6fd0b68bin0 -> 198 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/4c9b56fa31b381b7fb82fa698c6f3a756af8cc3cbin0 -> 120 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/4d4eb9538c5dcf8eb485e7b1d25e476926375abbbin0 -> 54 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/4e39c82f78d2c2109122e62d29a7e6b244d4e466bin0 -> 29 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/4f13e492e5330e2b0ac7cfd33bdb6f68e51da8381
-rw-r--r--fuzz/corpus/fuzz_serialization/50f7bf3ec485cf36e17c682136cf193664a54ec6bin0 -> 169 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/524d8a5744ca12baee06ac2d445758e0839e6cae1
-rw-r--r--fuzz/corpus/fuzz_serialization/531faf1813c549e0360c85b7eb48e8027d4cedcabin0 -> 52 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/54a1f0e11a61f82bfc474938c0d9109e263d918cbin0 -> 141 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/5528584ddeb60c8e7ea81d4c0bc4227734eeb393bin0 -> 859 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/55ccac63fbaaefbb92a099f0b7a53dee3d3066b3bin0 -> 97 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/5654db3776d1ca71a669fca63266a558e0fd9de5bin0 -> 43 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/592504fa45d5574c992ce453dbce57c85cd8c7d51
-rw-r--r--fuzz/corpus/fuzz_serialization/592d762aa688783a742e8f8a17dde6fef0e6b5d6bin0 -> 541 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/596704a7ad7f8f8707f5b78d18e15d341dc39d812
-rw-r--r--fuzz/corpus/fuzz_serialization/5ad5bc1d2fd6dcceea9fa2f0ad47687af9d4b363bin0 -> 29 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/5e90850401034e03214848e68ac58a16eb4500cebin0 -> 148 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/62691b118afe47b94cb40c796bdef339d0d988d8bin0 -> 508 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/63d993bb60fffd7db971b2cd6a4705bc8b1a48b1bin0 -> 44 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/65b3da6770c4f54774165c7d38dbe3798014aed11
-rw-r--r--fuzz/corpus/fuzz_serialization/65f4e4a70975970600b24ab9bad2fd4566811401bin0 -> 126 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/67da0bbde8a646154e47bf2aa07a6c8d9dbc1b3dbin0 -> 867 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/680d6e5c33be1f40552f8490c4b48092dc60b48d1
-rw-r--r--fuzz/corpus/fuzz_serialization/689feb67d67a14b517b465a04f53405737559a1f1
-rw-r--r--fuzz/corpus/fuzz_serialization/69ac32bf48028d8ae9178d8033d97c203a581975bin0 -> 208 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/6a366c1317147c81f22beb5d30508ba99f9cfc1abin0 -> 74 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/6ee5029e3f543c4b4c0aaf35ed145faf7d0e801bbin0 -> 269 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/6fcd960ca2930b6937c917eecb9260a0aa09c84abin0 -> 859 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/73a3ced41d5b17c23f7dc9bc9f14fa4d54bcbcf6bin0 -> 1342 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/76a328c4bdcf451f29c126bf8afdb2fe7959f6debin0 -> 105 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/79ef2ee1dbd00cc89471b5a14e9e5d1ddf72433cbin0 -> 8 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/7f41b5802c84844391268f34b64754a448042ac7bin0 -> 1500 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/80904ef56b525af4d82b26c38ee9ed84fbe0e8aabin0 -> 23 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/80a2f44ca0165122312c549c2d3041e22ec72bb21
-rw-r--r--fuzz/corpus/fuzz_serialization/83631c962f6eb3da79b4ac7c8c7074b8d62276791
-rw-r--r--fuzz/corpus/fuzz_serialization/8441252d77c0917fc6c320cfbf39750f4199ece0bin0 -> 42 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/858e8a25126145e8652b1c7b343ed9ff1f6c553fbin0 -> 1925 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/8a5c1ec4919c4969acb7773394d0a6be0db6b0951
-rw-r--r--fuzz/corpus/fuzz_serialization/8b00d59cd338662b7c1dedbe6e59a79cf0c6c68f1
-rw-r--r--fuzz/corpus/fuzz_serialization/8f34b6450307981b6781762ac91d95be712b356ebin0 -> 153 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/9081ee6e4c227d5358b1f1ddc5c0cbe028bd8dda1
-rw-r--r--fuzz/corpus/fuzz_serialization/9170a32e0626ef41739a17e35b953834eb1c5615bin0 -> 43 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/92bc0af3e1560941650609e3838e9f2a8368ae052
-rw-r--r--fuzz/corpus/fuzz_serialization/9405f4e8857cfd57af09922f2288c7a3ecb3ae37bin0 -> 151 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/954f87b690e4197ce18370cc095e38f19d46079ebin0 -> 73 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/95c8e1e713d2ae5295f770d12f179f1f3a1ccd501
-rw-r--r--fuzz/corpus/fuzz_serialization/9b232d55db40c0c0f37d1a1e32900ccc8cf6fa3cbin0 -> 61 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/9bc313bbd93a1b7255982a0b530216f895f1e7e9bin0 -> 2055 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/a5129c501ad4d923bab9f5a6bd2c5285c29a3b3bbin0 -> 103 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/a5e860ac13a20ab2f18783407f78bb905a0963ebbin0 -> 1461 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/a6fe820db6653fb5927c1a6bd8f51312efa25066bin0 -> 152 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/a86035f1a172b4fb88a7a69a7067fd47e2e27879bin0 -> 102 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/ac2592e04c8ccbd9fce8ee3e3b24936bacbea892bin0 -> 2164 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/af28dd714ec6294a073e197f8dd7d71bcb6f1e2c1
-rw-r--r--fuzz/corpus/fuzz_serialization/b0c497a1362aaf4a88c748cd0cb7d7e9f42335a9bin0 -> 723 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/b5bef5ad04216ad1f791e597955d8d8186d62708bin0 -> 130 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/b5e0d763f52cbcff1901a681e4c20e27791990101
-rw-r--r--fuzz/corpus/fuzz_serialization/b8519b2ff0c0594b3efb263a8fbab2c95f47cb4fbin0 -> 34 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/b95f6fb075e53d512a044a2360f433369b040e2abin0 -> 194 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/ba89b5c3dcd4dfc793072a98906602abe615d3dfbin0 -> 528 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/bbde76499882a6ff1e92ed9e5450b9d1b403250dbin0 -> 9 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/bcb4b1979366bc14e35ecceef03f26a476f91538bin0 -> 68 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/beca236cd931cf5352ec7b89411909a4b44c9138bin0 -> 1054 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/c1cebe31fadd74fc77b17ce6c0e44ef289444c6d1
-rw-r--r--fuzz/corpus/fuzz_serialization/c340e8e3f8b1bff333981c8d463daddd5ff4e855bin0 -> 850 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/c68eef36f0848d2dc34d212d294f37ce490d3258bin0 -> 286 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/c69ca63f0353737b22874f88f5a67dafc1bf7d44bin0 -> 1093 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/ce6b603fce80719da46c97eb1b95bbd0ad777070bin0 -> 357 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/ce8fbfa93be2bb9182b40186316e43da0dbc55d8bin0 -> 81 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/d0476e429d72246b03d172241b0d201c7f012be81
-rw-r--r--fuzz/corpus/fuzz_serialization/d1f6790b8477c7e41e3dc072c24b4b80aafc67391
-rw-r--r--fuzz/corpus/fuzz_serialization/d56083163211e89f5cfa50e8ae80d1a11d03c250bin0 -> 1060 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/d8db49096b062b619719f6308c8d2b9cf043c7c21
-rw-r--r--fuzz/corpus/fuzz_serialization/d8dcf7b34858f2f7e7d8e50337bd68bc4b4f4fb0bin0 -> 77 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/d9bf92f929213b053f6e37ef4e18c9533d0d42ff1
-rw-r--r--fuzz/corpus/fuzz_serialization/dae54cc5b98acbe40db9a826182e66c06dc6872b1
-rw-r--r--fuzz/corpus/fuzz_serialization/db178237414743cf16da250d10ffd0ae98bd127f1
-rw-r--r--fuzz/corpus/fuzz_serialization/dbb873b6c49161fb72609a09c79b1b4ef461e3f7bin0 -> 27 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/dbee5c3fa40e7883ee26d33234ed6364cb7b3da6bin0 -> 437 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/dd735e0d38c3775492fc9d0346516eb675c47428bin0 -> 99 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/ddb98f7964ea51bb468c9fa93af5f11bfc072627bin0 -> 528 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/e3c1912a734aa51cc75fb7e67db525f34ac1e43e1
-rw-r--r--fuzz/corpus/fuzz_serialization/e76108ff6580c8809875c5051c8a3df9ce8fc85abin0 -> 1108 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/ebd0b9c4978407a17b7331e0562dc9ad31b292041
-rw-r--r--fuzz/corpus/fuzz_serialization/f0ab531075130e5e92df690fa7311dafed5b43bcbin0 -> 168 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/f0b7597e0a424ca259bbd593ebf179789dbc0c09bin0 -> 220 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/f573e80e11c969b592809f357dc72eb3caf356dd1
-rw-r--r--fuzz/corpus/fuzz_serialization/f69a22307982dab12f462040e386daba86052e2cbin0 -> 830 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/f82023faffb3b3e67d5d587caa6b53ab10f27fb6bin0 -> 19 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/fa30ba2c9565dcccb091ade5dbab902e0cf0c3b4bin0 -> 720 bytes
-rw-r--r--fuzz/corpus/fuzz_serialization/fab44564f0279bbfeddbbdfe97a92b882d7a3e9c1
-rw-r--r--fuzz/corpus/fuzz_serialization/fafe20628a68c12b150c9af37e24c36f746722881
-rw-r--r--fuzz/corpus/fuzz_serialization/fed40fead812cb12d7906402be2efb5a39ff84c6bin0 -> 126 bytes
-rw-r--r--fuzz/fuzz_serialization.cpp139
-rw-r--r--src/include/ndpi_api.h20
-rw-r--r--src/lib/ndpi_serializer.c395
-rw-r--r--tests/unit/unit.c15
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
new file mode 100644
index 000000000..b7ffcef42
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/0067200701e9b0b5ec3db13f387a75e9e82202b0
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/00ba573f9435b38d7205d995bbfe1813add81ab3 b/fuzz/corpus/fuzz_serialization/00ba573f9435b38d7205d995bbfe1813add81ab3
new file mode 100644
index 000000000..79d7380b1
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/00ba573f9435b38d7205d995bbfe1813add81ab3
Binary files differ
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
new file mode 100644
index 000000000..d8d696468
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/03e684ba5d7a6306ddfb1dd15f40f2c4a1a074ee
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/07d9e6281c5355f19da85e221fc562ec2d877e3b b/fuzz/corpus/fuzz_serialization/07d9e6281c5355f19da85e221fc562ec2d877e3b
new file mode 100644
index 000000000..9fcd23466
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/07d9e6281c5355f19da85e221fc562ec2d877e3b
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/07dda5cbda20802250efce051169313efcc19c91 b/fuzz/corpus/fuzz_serialization/07dda5cbda20802250efce051169313efcc19c91
new file mode 100644
index 000000000..897cb5955
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/07dda5cbda20802250efce051169313efcc19c91
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/0826de64028c8e890d2c9f95ee0ac3180ad45431 b/fuzz/corpus/fuzz_serialization/0826de64028c8e890d2c9f95ee0ac3180ad45431
new file mode 100644
index 000000000..6a5aa7fe9
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/0826de64028c8e890d2c9f95ee0ac3180ad45431
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/09251a8df7e23a0e332eb0beee7afdec7e48fc7d b/fuzz/corpus/fuzz_serialization/09251a8df7e23a0e332eb0beee7afdec7e48fc7d
new file mode 100644
index 000000000..23ddd25cd
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/09251a8df7e23a0e332eb0beee7afdec7e48fc7d
Binary files differ
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
new file mode 100644
index 000000000..9e9735fe0
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/1019a3c07fe32d6fab2e673671f557717d4997d7
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/102b9366042c4c2ada3408c1808bc8cae19199e6 b/fuzz/corpus/fuzz_serialization/102b9366042c4c2ada3408c1808bc8cae19199e6
new file mode 100644
index 000000000..44482bb8c
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/102b9366042c4c2ada3408c1808bc8cae19199e6
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/111bf62468546c168ac3da1052ec3bf12c51d927 b/fuzz/corpus/fuzz_serialization/111bf62468546c168ac3da1052ec3bf12c51d927
new file mode 100644
index 000000000..ffcd99b5e
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/111bf62468546c168ac3da1052ec3bf12c51d927
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/123959e688316f1156b5fd63115e66990691dab8 b/fuzz/corpus/fuzz_serialization/123959e688316f1156b5fd63115e66990691dab8
new file mode 100644
index 000000000..052e33956
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/123959e688316f1156b5fd63115e66990691dab8
Binary files differ
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
new file mode 100644
index 000000000..d2469640c
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/1799f48cfbb2ab6b1110385ff98bb8c46313cdec
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/1835e91fe48390e58af954a32fd7c76f31bd9589 b/fuzz/corpus/fuzz_serialization/1835e91fe48390e58af954a32fd7c76f31bd9589
new file mode 100644
index 000000000..e369ffa8f
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/1835e91fe48390e58af954a32fd7c76f31bd9589
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/1a8f29ec0d35809a410d5491f71238139e481538 b/fuzz/corpus/fuzz_serialization/1a8f29ec0d35809a410d5491f71238139e481538
new file mode 100644
index 000000000..c448c554c
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/1a8f29ec0d35809a410d5491f71238139e481538
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/1af6e9701b53c33f27e958848e077cc8663f2d49 b/fuzz/corpus/fuzz_serialization/1af6e9701b53c33f27e958848e077cc8663f2d49
new file mode 100644
index 000000000..55b2120cc
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/1af6e9701b53c33f27e958848e077cc8663f2d49
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/1b9853e05cb525c5e3f95cc351e6af1d93169e21 b/fuzz/corpus/fuzz_serialization/1b9853e05cb525c5e3f95cc351e6af1d93169e21
new file mode 100644
index 000000000..8674288b8
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/1b9853e05cb525c5e3f95cc351e6af1d93169e21
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/1c1f0a2fb6bce1b4efad57e900e1dea1884b31b5 b/fuzz/corpus/fuzz_serialization/1c1f0a2fb6bce1b4efad57e900e1dea1884b31b5
new file mode 100644
index 000000000..222a1b47e
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/1c1f0a2fb6bce1b4efad57e900e1dea1884b31b5
Binary files differ
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
new file mode 100644
index 000000000..c93b14d53
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/22180792385106ce0b6ce830e1ff76f431a01c9d
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/23d2435c588ac50944b11976815bf162f433e0ab b/fuzz/corpus/fuzz_serialization/23d2435c588ac50944b11976815bf162f433e0ab
new file mode 100644
index 000000000..cc3f0f3cc
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/23d2435c588ac50944b11976815bf162f433e0ab
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/25885772862548d55ad11ac6b1913a2b7a9f2513 b/fuzz/corpus/fuzz_serialization/25885772862548d55ad11ac6b1913a2b7a9f2513
new file mode 100644
index 000000000..fcac78825
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/25885772862548d55ad11ac6b1913a2b7a9f2513
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/2c16853a4cc039ea91f734590db769824ae54318 b/fuzz/corpus/fuzz_serialization/2c16853a4cc039ea91f734590db769824ae54318
new file mode 100644
index 000000000..cea7d5b12
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/2c16853a4cc039ea91f734590db769824ae54318
Binary files differ
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
new file mode 100644
index 000000000..c55e8f814
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/30fba8556db34f5d467c0d677fe176564b377748
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/33a78cbd4539e3757769bb950283c7f8a340f20d b/fuzz/corpus/fuzz_serialization/33a78cbd4539e3757769bb950283c7f8a340f20d
new file mode 100644
index 000000000..d2ec36796
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/33a78cbd4539e3757769bb950283c7f8a340f20d
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/36a23d77f4380edecd3ba002c371f2e9ebfe4fc2 b/fuzz/corpus/fuzz_serialization/36a23d77f4380edecd3ba002c371f2e9ebfe4fc2
new file mode 100644
index 000000000..004eecf58
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/36a23d77f4380edecd3ba002c371f2e9ebfe4fc2
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/38eba3bacca0984d08666561e863d816fae7bd79 b/fuzz/corpus/fuzz_serialization/38eba3bacca0984d08666561e863d816fae7bd79
new file mode 100644
index 000000000..f81f6b4ed
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/38eba3bacca0984d08666561e863d816fae7bd79
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/39a7293fe98a37dbd3bb56eafebff914df2e0835 b/fuzz/corpus/fuzz_serialization/39a7293fe98a37dbd3bb56eafebff914df2e0835
new file mode 100644
index 000000000..7678394cb
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/39a7293fe98a37dbd3bb56eafebff914df2e0835
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/3a474dedd7c902caa19c0aea83735fe5805b5ae5 b/fuzz/corpus/fuzz_serialization/3a474dedd7c902caa19c0aea83735fe5805b5ae5
new file mode 100644
index 000000000..57107923a
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/3a474dedd7c902caa19c0aea83735fe5805b5ae5
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/3c49269686ee0c250a2d977a86d965727418ebe0 b/fuzz/corpus/fuzz_serialization/3c49269686ee0c250a2d977a86d965727418ebe0
new file mode 100644
index 000000000..e222d01c3
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/3c49269686ee0c250a2d977a86d965727418ebe0
Binary files differ
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
new file mode 100644
index 000000000..e0849ad36
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/3eec95f5cdf41fd6200a215e24d60f3bede4fa18
Binary files differ
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
new file mode 100644
index 000000000..0853d86aa
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/44c16af83b7bfe485630ec7417a8a93dd6a4f344
Binary files differ
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
new file mode 100644
index 000000000..0f84de054
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/485ffdac621c7a2fe64c49a9d43218c4297b0291
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/4a3ac753e86aee22a1fba2144d452def73f5d445 b/fuzz/corpus/fuzz_serialization/4a3ac753e86aee22a1fba2144d452def73f5d445
new file mode 100644
index 000000000..7106b6e26
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/4a3ac753e86aee22a1fba2144d452def73f5d445
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/4a4cc4a8eea5e60045f94339f31c6a70a6fd0b68 b/fuzz/corpus/fuzz_serialization/4a4cc4a8eea5e60045f94339f31c6a70a6fd0b68
new file mode 100644
index 000000000..890012598
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/4a4cc4a8eea5e60045f94339f31c6a70a6fd0b68
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/4c9b56fa31b381b7fb82fa698c6f3a756af8cc3c b/fuzz/corpus/fuzz_serialization/4c9b56fa31b381b7fb82fa698c6f3a756af8cc3c
new file mode 100644
index 000000000..8762265c6
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/4c9b56fa31b381b7fb82fa698c6f3a756af8cc3c
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/4d4eb9538c5dcf8eb485e7b1d25e476926375abb b/fuzz/corpus/fuzz_serialization/4d4eb9538c5dcf8eb485e7b1d25e476926375abb
new file mode 100644
index 000000000..2bd2fc477
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/4d4eb9538c5dcf8eb485e7b1d25e476926375abb
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/4e39c82f78d2c2109122e62d29a7e6b244d4e466 b/fuzz/corpus/fuzz_serialization/4e39c82f78d2c2109122e62d29a7e6b244d4e466
new file mode 100644
index 000000000..0351dbbf5
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/4e39c82f78d2c2109122e62d29a7e6b244d4e466
Binary files differ
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
new file mode 100644
index 000000000..02dd3dfa3
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/50f7bf3ec485cf36e17c682136cf193664a54ec6
Binary files differ
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
new file mode 100644
index 000000000..4f2cbcb54
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/531faf1813c549e0360c85b7eb48e8027d4cedca
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/54a1f0e11a61f82bfc474938c0d9109e263d918c b/fuzz/corpus/fuzz_serialization/54a1f0e11a61f82bfc474938c0d9109e263d918c
new file mode 100644
index 000000000..01acfc37d
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/54a1f0e11a61f82bfc474938c0d9109e263d918c
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/5528584ddeb60c8e7ea81d4c0bc4227734eeb393 b/fuzz/corpus/fuzz_serialization/5528584ddeb60c8e7ea81d4c0bc4227734eeb393
new file mode 100644
index 000000000..a929bf2e5
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/5528584ddeb60c8e7ea81d4c0bc4227734eeb393
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/55ccac63fbaaefbb92a099f0b7a53dee3d3066b3 b/fuzz/corpus/fuzz_serialization/55ccac63fbaaefbb92a099f0b7a53dee3d3066b3
new file mode 100644
index 000000000..6e7364087
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/55ccac63fbaaefbb92a099f0b7a53dee3d3066b3
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/5654db3776d1ca71a669fca63266a558e0fd9de5 b/fuzz/corpus/fuzz_serialization/5654db3776d1ca71a669fca63266a558e0fd9de5
new file mode 100644
index 000000000..14c8a11d7
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/5654db3776d1ca71a669fca63266a558e0fd9de5
Binary files differ
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
new file mode 100644
index 000000000..ea3132db1
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/592d762aa688783a742e8f8a17dde6fef0e6b5d6
Binary files differ
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
new file mode 100644
index 000000000..9e153d128
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/5ad5bc1d2fd6dcceea9fa2f0ad47687af9d4b363
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/5e90850401034e03214848e68ac58a16eb4500ce b/fuzz/corpus/fuzz_serialization/5e90850401034e03214848e68ac58a16eb4500ce
new file mode 100644
index 000000000..cdb5abc5c
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/5e90850401034e03214848e68ac58a16eb4500ce
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/62691b118afe47b94cb40c796bdef339d0d988d8 b/fuzz/corpus/fuzz_serialization/62691b118afe47b94cb40c796bdef339d0d988d8
new file mode 100644
index 000000000..30a4101b7
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/62691b118afe47b94cb40c796bdef339d0d988d8
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/63d993bb60fffd7db971b2cd6a4705bc8b1a48b1 b/fuzz/corpus/fuzz_serialization/63d993bb60fffd7db971b2cd6a4705bc8b1a48b1
new file mode 100644
index 000000000..83dab5779
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/63d993bb60fffd7db971b2cd6a4705bc8b1a48b1
Binary files differ
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
new file mode 100644
index 000000000..5991ec2af
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/65f4e4a70975970600b24ab9bad2fd4566811401
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/67da0bbde8a646154e47bf2aa07a6c8d9dbc1b3d b/fuzz/corpus/fuzz_serialization/67da0bbde8a646154e47bf2aa07a6c8d9dbc1b3d
new file mode 100644
index 000000000..18538d7f8
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/67da0bbde8a646154e47bf2aa07a6c8d9dbc1b3d
Binary files differ
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
new file mode 100644
index 000000000..7d80bf257
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/69ac32bf48028d8ae9178d8033d97c203a581975
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/6a366c1317147c81f22beb5d30508ba99f9cfc1a b/fuzz/corpus/fuzz_serialization/6a366c1317147c81f22beb5d30508ba99f9cfc1a
new file mode 100644
index 000000000..5ee2b370d
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/6a366c1317147c81f22beb5d30508ba99f9cfc1a
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/6ee5029e3f543c4b4c0aaf35ed145faf7d0e801b b/fuzz/corpus/fuzz_serialization/6ee5029e3f543c4b4c0aaf35ed145faf7d0e801b
new file mode 100644
index 000000000..285583316
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/6ee5029e3f543c4b4c0aaf35ed145faf7d0e801b
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/6fcd960ca2930b6937c917eecb9260a0aa09c84a b/fuzz/corpus/fuzz_serialization/6fcd960ca2930b6937c917eecb9260a0aa09c84a
new file mode 100644
index 000000000..c897e4c1c
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/6fcd960ca2930b6937c917eecb9260a0aa09c84a
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/73a3ced41d5b17c23f7dc9bc9f14fa4d54bcbcf6 b/fuzz/corpus/fuzz_serialization/73a3ced41d5b17c23f7dc9bc9f14fa4d54bcbcf6
new file mode 100644
index 000000000..1b8e734f2
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/73a3ced41d5b17c23f7dc9bc9f14fa4d54bcbcf6
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/76a328c4bdcf451f29c126bf8afdb2fe7959f6de b/fuzz/corpus/fuzz_serialization/76a328c4bdcf451f29c126bf8afdb2fe7959f6de
new file mode 100644
index 000000000..d58ebc3a2
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/76a328c4bdcf451f29c126bf8afdb2fe7959f6de
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/79ef2ee1dbd00cc89471b5a14e9e5d1ddf72433c b/fuzz/corpus/fuzz_serialization/79ef2ee1dbd00cc89471b5a14e9e5d1ddf72433c
new file mode 100644
index 000000000..101746c36
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/79ef2ee1dbd00cc89471b5a14e9e5d1ddf72433c
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/7f41b5802c84844391268f34b64754a448042ac7 b/fuzz/corpus/fuzz_serialization/7f41b5802c84844391268f34b64754a448042ac7
new file mode 100644
index 000000000..f6c4b9df0
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/7f41b5802c84844391268f34b64754a448042ac7
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/80904ef56b525af4d82b26c38ee9ed84fbe0e8aa b/fuzz/corpus/fuzz_serialization/80904ef56b525af4d82b26c38ee9ed84fbe0e8aa
new file mode 100644
index 000000000..471284788
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/80904ef56b525af4d82b26c38ee9ed84fbe0e8aa
Binary files differ
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
new file mode 100644
index 000000000..7fe4a3d58
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/8441252d77c0917fc6c320cfbf39750f4199ece0
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/858e8a25126145e8652b1c7b343ed9ff1f6c553f b/fuzz/corpus/fuzz_serialization/858e8a25126145e8652b1c7b343ed9ff1f6c553f
new file mode 100644
index 000000000..99a9b737f
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/858e8a25126145e8652b1c7b343ed9ff1f6c553f
Binary files differ
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
new file mode 100644
index 000000000..a844905c3
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/8f34b6450307981b6781762ac91d95be712b356e
Binary files differ
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
new file mode 100644
index 000000000..b19b77229
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/9170a32e0626ef41739a17e35b953834eb1c5615
Binary files differ
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
new file mode 100644
index 000000000..3aab7d579
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/9405f4e8857cfd57af09922f2288c7a3ecb3ae37
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/954f87b690e4197ce18370cc095e38f19d46079e b/fuzz/corpus/fuzz_serialization/954f87b690e4197ce18370cc095e38f19d46079e
new file mode 100644
index 000000000..c90d8a75f
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/954f87b690e4197ce18370cc095e38f19d46079e
Binary files differ
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
new file mode 100644
index 000000000..1224bba0c
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/9b232d55db40c0c0f37d1a1e32900ccc8cf6fa3c
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/9bc313bbd93a1b7255982a0b530216f895f1e7e9 b/fuzz/corpus/fuzz_serialization/9bc313bbd93a1b7255982a0b530216f895f1e7e9
new file mode 100644
index 000000000..50b0c0d76
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/9bc313bbd93a1b7255982a0b530216f895f1e7e9
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/a5129c501ad4d923bab9f5a6bd2c5285c29a3b3b b/fuzz/corpus/fuzz_serialization/a5129c501ad4d923bab9f5a6bd2c5285c29a3b3b
new file mode 100644
index 000000000..6b4e602e6
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/a5129c501ad4d923bab9f5a6bd2c5285c29a3b3b
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/a5e860ac13a20ab2f18783407f78bb905a0963eb b/fuzz/corpus/fuzz_serialization/a5e860ac13a20ab2f18783407f78bb905a0963eb
new file mode 100644
index 000000000..d0a3ba75b
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/a5e860ac13a20ab2f18783407f78bb905a0963eb
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/a6fe820db6653fb5927c1a6bd8f51312efa25066 b/fuzz/corpus/fuzz_serialization/a6fe820db6653fb5927c1a6bd8f51312efa25066
new file mode 100644
index 000000000..d005283d9
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/a6fe820db6653fb5927c1a6bd8f51312efa25066
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/a86035f1a172b4fb88a7a69a7067fd47e2e27879 b/fuzz/corpus/fuzz_serialization/a86035f1a172b4fb88a7a69a7067fd47e2e27879
new file mode 100644
index 000000000..91de8509c
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/a86035f1a172b4fb88a7a69a7067fd47e2e27879
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/ac2592e04c8ccbd9fce8ee3e3b24936bacbea892 b/fuzz/corpus/fuzz_serialization/ac2592e04c8ccbd9fce8ee3e3b24936bacbea892
new file mode 100644
index 000000000..f9abe6e30
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/ac2592e04c8ccbd9fce8ee3e3b24936bacbea892
Binary files differ
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
new file mode 100644
index 000000000..0b2f829bb
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/b0c497a1362aaf4a88c748cd0cb7d7e9f42335a9
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/b5bef5ad04216ad1f791e597955d8d8186d62708 b/fuzz/corpus/fuzz_serialization/b5bef5ad04216ad1f791e597955d8d8186d62708
new file mode 100644
index 000000000..014ecd084
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/b5bef5ad04216ad1f791e597955d8d8186d62708
Binary files differ
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
new file mode 100644
index 000000000..5a1e8837b
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/b8519b2ff0c0594b3efb263a8fbab2c95f47cb4f
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/b95f6fb075e53d512a044a2360f433369b040e2a b/fuzz/corpus/fuzz_serialization/b95f6fb075e53d512a044a2360f433369b040e2a
new file mode 100644
index 000000000..4bcbaffad
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/b95f6fb075e53d512a044a2360f433369b040e2a
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/ba89b5c3dcd4dfc793072a98906602abe615d3df b/fuzz/corpus/fuzz_serialization/ba89b5c3dcd4dfc793072a98906602abe615d3df
new file mode 100644
index 000000000..6b1506cb6
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/ba89b5c3dcd4dfc793072a98906602abe615d3df
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/bbde76499882a6ff1e92ed9e5450b9d1b403250d b/fuzz/corpus/fuzz_serialization/bbde76499882a6ff1e92ed9e5450b9d1b403250d
new file mode 100644
index 000000000..0f2625ea0
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/bbde76499882a6ff1e92ed9e5450b9d1b403250d
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/bcb4b1979366bc14e35ecceef03f26a476f91538 b/fuzz/corpus/fuzz_serialization/bcb4b1979366bc14e35ecceef03f26a476f91538
new file mode 100644
index 000000000..c5936b4e6
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/bcb4b1979366bc14e35ecceef03f26a476f91538
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/beca236cd931cf5352ec7b89411909a4b44c9138 b/fuzz/corpus/fuzz_serialization/beca236cd931cf5352ec7b89411909a4b44c9138
new file mode 100644
index 000000000..ffe64f964
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/beca236cd931cf5352ec7b89411909a4b44c9138
Binary files differ
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
new file mode 100644
index 000000000..3eb385175
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/c340e8e3f8b1bff333981c8d463daddd5ff4e855
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/c68eef36f0848d2dc34d212d294f37ce490d3258 b/fuzz/corpus/fuzz_serialization/c68eef36f0848d2dc34d212d294f37ce490d3258
new file mode 100644
index 000000000..899303e3d
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/c68eef36f0848d2dc34d212d294f37ce490d3258
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/c69ca63f0353737b22874f88f5a67dafc1bf7d44 b/fuzz/corpus/fuzz_serialization/c69ca63f0353737b22874f88f5a67dafc1bf7d44
new file mode 100644
index 000000000..11e6dc1e2
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/c69ca63f0353737b22874f88f5a67dafc1bf7d44
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/ce6b603fce80719da46c97eb1b95bbd0ad777070 b/fuzz/corpus/fuzz_serialization/ce6b603fce80719da46c97eb1b95bbd0ad777070
new file mode 100644
index 000000000..4855be1ac
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/ce6b603fce80719da46c97eb1b95bbd0ad777070
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/ce8fbfa93be2bb9182b40186316e43da0dbc55d8 b/fuzz/corpus/fuzz_serialization/ce8fbfa93be2bb9182b40186316e43da0dbc55d8
new file mode 100644
index 000000000..ecc6f1e46
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/ce8fbfa93be2bb9182b40186316e43da0dbc55d8
Binary files differ
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
new file mode 100644
index 000000000..0d713ad38
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/d56083163211e89f5cfa50e8ae80d1a11d03c250
Binary files differ
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
new file mode 100644
index 000000000..3adb67d26
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/d8dcf7b34858f2f7e7d8e50337bd68bc4b4f4fb0
Binary files differ
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
new file mode 100644
index 000000000..e48e6a16f
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/dbb873b6c49161fb72609a09c79b1b4ef461e3f7
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/dbee5c3fa40e7883ee26d33234ed6364cb7b3da6 b/fuzz/corpus/fuzz_serialization/dbee5c3fa40e7883ee26d33234ed6364cb7b3da6
new file mode 100644
index 000000000..9a8a489b0
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/dbee5c3fa40e7883ee26d33234ed6364cb7b3da6
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/dd735e0d38c3775492fc9d0346516eb675c47428 b/fuzz/corpus/fuzz_serialization/dd735e0d38c3775492fc9d0346516eb675c47428
new file mode 100644
index 000000000..62ab6fa84
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/dd735e0d38c3775492fc9d0346516eb675c47428
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/ddb98f7964ea51bb468c9fa93af5f11bfc072627 b/fuzz/corpus/fuzz_serialization/ddb98f7964ea51bb468c9fa93af5f11bfc072627
new file mode 100644
index 000000000..abdfd7984
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/ddb98f7964ea51bb468c9fa93af5f11bfc072627
Binary files differ
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
new file mode 100644
index 000000000..635817ced
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/e76108ff6580c8809875c5051c8a3df9ce8fc85a
Binary files differ
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
new file mode 100644
index 000000000..cd1a4b19d
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/f0ab531075130e5e92df690fa7311dafed5b43bc
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/f0b7597e0a424ca259bbd593ebf179789dbc0c09 b/fuzz/corpus/fuzz_serialization/f0b7597e0a424ca259bbd593ebf179789dbc0c09
new file mode 100644
index 000000000..f6e04204a
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/f0b7597e0a424ca259bbd593ebf179789dbc0c09
Binary files differ
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
new file mode 100644
index 000000000..66f59bcc7
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/f69a22307982dab12f462040e386daba86052e2c
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/f82023faffb3b3e67d5d587caa6b53ab10f27fb6 b/fuzz/corpus/fuzz_serialization/f82023faffb3b3e67d5d587caa6b53ab10f27fb6
new file mode 100644
index 000000000..ef957661e
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/f82023faffb3b3e67d5d587caa6b53ab10f27fb6
Binary files differ
diff --git a/fuzz/corpus/fuzz_serialization/fa30ba2c9565dcccb091ade5dbab902e0cf0c3b4 b/fuzz/corpus/fuzz_serialization/fa30ba2c9565dcccb091ade5dbab902e0cf0c3b4
new file mode 100644
index 000000000..5a9a0ba70
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/fa30ba2c9565dcccb091ade5dbab902e0cf0c3b4
Binary files differ
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
new file mode 100644
index 000000000..41850354d
--- /dev/null
+++ b/fuzz/corpus/fuzz_serialization/fed40fead812cb12d7906402be2efb5a39ff84c6
Binary files differ
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);