From 6d00a9e0bd4cdb2be26577f53b75b3078cefd4c3 Mon Sep 17 00:00:00 2001 From: Ivan Nardi <12729895+IvanNardi@users.noreply.github.com> Date: Fri, 27 Jan 2023 07:09:18 +0100 Subject: [PATCH] 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`) --- .github/workflows/cifuzz.yml | 2 +- .gitignore | 2 + fuzz/Makefile.am | 25 +- .../0067200701e9b0b5ec3db13f387a75e9e82202b0 | Bin 0 -> 34 bytes .../00ba573f9435b38d7205d995bbfe1813add81ab3 | Bin 0 -> 337 bytes .../0228f43998915b3c03c642cadacb0fc9f34ad80f | 1 + .../03e684ba5d7a6306ddfb1dd15f40f2c4a1a074ee | Bin 0 -> 15 bytes .../07d9e6281c5355f19da85e221fc562ec2d877e3b | Bin 0 -> 144 bytes .../07dda5cbda20802250efce051169313efcc19c91 | Bin 0 -> 540 bytes .../0826de64028c8e890d2c9f95ee0ac3180ad45431 | Bin 0 -> 9 bytes .../09251a8df7e23a0e332eb0beee7afdec7e48fc7d | Bin 0 -> 561 bytes .../0cf7de690bf6e03f2843688fef7e5fa6f8f5b50a | 1 + .../0f6e2d10bdff7d0f0f6ce142c9fa4d2a22d39fdb | 1 + .../1019a3c07fe32d6fab2e673671f557717d4997d7 | Bin 0 -> 65 bytes .../102b9366042c4c2ada3408c1808bc8cae19199e6 | Bin 0 -> 194 bytes .../111bf62468546c168ac3da1052ec3bf12c51d927 | Bin 0 -> 74 bytes .../123959e688316f1156b5fd63115e66990691dab8 | Bin 0 -> 343 bytes .../1599e9fa41ec68c80230491902786bee889f5bcb | 1 + .../1799f48cfbb2ab6b1110385ff98bb8c46313cdec | Bin 0 -> 5 bytes .../1835e91fe48390e58af954a32fd7c76f31bd9589 | Bin 0 -> 748 bytes .../1a8f29ec0d35809a410d5491f71238139e481538 | Bin 0 -> 34 bytes .../1af6e9701b53c33f27e958848e077cc8663f2d49 | Bin 0 -> 143 bytes .../1b9853e05cb525c5e3f95cc351e6af1d93169e21 | Bin 0 -> 2006 bytes .../1c1f0a2fb6bce1b4efad57e900e1dea1884b31b5 | Bin 0 -> 1092 bytes .../1d25ea7808bdc1960f4fa0b1265d348157676d34 | 1 + .../212f0b6f4f250553420c4b462b6adfbca29667e7 | 1 + .../22180792385106ce0b6ce830e1ff76f431a01c9d | Bin 0 -> 39 bytes .../23d2435c588ac50944b11976815bf162f433e0ab | Bin 0 -> 89 bytes .../25885772862548d55ad11ac6b1913a2b7a9f2513 | Bin 0 -> 555 bytes .../2c16853a4cc039ea91f734590db769824ae54318 | Bin 0 -> 36 bytes .../2f10304d880a3bceb43f89514ff7661474d818f9 | 3 + .../30fba8556db34f5d467c0d677fe176564b377748 | Bin 0 -> 35 bytes .../33a78cbd4539e3757769bb950283c7f8a340f20d | Bin 0 -> 718 bytes .../36a23d77f4380edecd3ba002c371f2e9ebfe4fc2 | Bin 0 -> 184 bytes .../38eba3bacca0984d08666561e863d816fae7bd79 | Bin 0 -> 426 bytes .../39a7293fe98a37dbd3bb56eafebff914df2e0835 | Bin 0 -> 516 bytes .../3a474dedd7c902caa19c0aea83735fe5805b5ae5 | Bin 0 -> 76 bytes .../3c49269686ee0c250a2d977a86d965727418ebe0 | Bin 0 -> 13 bytes .../3ccc20957ca1de354f0911587f3f6a89bf639bbe | 1 + .../3eec95f5cdf41fd6200a215e24d60f3bede4fa18 | Bin 0 -> 172 bytes .../44613cadc2a119c0445d8aca742ddaa6e9d14f15 | 1 + .../44c16af83b7bfe485630ec7417a8a93dd6a4f344 | Bin 0 -> 7 bytes .../4599f42df4bd96e578ca04c9f530bce55f85c593 | 1 + .../46220eb9c32d8f39af7842340be4410bbc6b0acf | 1 + .../47102208d3296068fd9d922e8794d5614bf673b4 | 1 + .../485ffdac621c7a2fe64c49a9d43218c4297b0291 | Bin 0 -> 1781 bytes .../4a3ac753e86aee22a1fba2144d452def73f5d445 | Bin 0 -> 2211 bytes .../4a4cc4a8eea5e60045f94339f31c6a70a6fd0b68 | Bin 0 -> 198 bytes .../4c9b56fa31b381b7fb82fa698c6f3a756af8cc3c | Bin 0 -> 120 bytes .../4d4eb9538c5dcf8eb485e7b1d25e476926375abb | Bin 0 -> 54 bytes .../4e39c82f78d2c2109122e62d29a7e6b244d4e466 | Bin 0 -> 29 bytes .../4f13e492e5330e2b0ac7cfd33bdb6f68e51da838 | 1 + .../50f7bf3ec485cf36e17c682136cf193664a54ec6 | Bin 0 -> 169 bytes .../524d8a5744ca12baee06ac2d445758e0839e6cae | 1 + .../531faf1813c549e0360c85b7eb48e8027d4cedca | Bin 0 -> 52 bytes .../54a1f0e11a61f82bfc474938c0d9109e263d918c | Bin 0 -> 141 bytes .../5528584ddeb60c8e7ea81d4c0bc4227734eeb393 | Bin 0 -> 859 bytes .../55ccac63fbaaefbb92a099f0b7a53dee3d3066b3 | Bin 0 -> 97 bytes .../5654db3776d1ca71a669fca63266a558e0fd9de5 | Bin 0 -> 43 bytes .../592504fa45d5574c992ce453dbce57c85cd8c7d5 | 1 + .../592d762aa688783a742e8f8a17dde6fef0e6b5d6 | Bin 0 -> 541 bytes .../596704a7ad7f8f8707f5b78d18e15d341dc39d81 | 2 + .../5ad5bc1d2fd6dcceea9fa2f0ad47687af9d4b363 | Bin 0 -> 29 bytes .../5e90850401034e03214848e68ac58a16eb4500ce | Bin 0 -> 148 bytes .../62691b118afe47b94cb40c796bdef339d0d988d8 | Bin 0 -> 508 bytes .../63d993bb60fffd7db971b2cd6a4705bc8b1a48b1 | Bin 0 -> 44 bytes .../65b3da6770c4f54774165c7d38dbe3798014aed1 | 1 + .../65f4e4a70975970600b24ab9bad2fd4566811401 | Bin 0 -> 126 bytes .../67da0bbde8a646154e47bf2aa07a6c8d9dbc1b3d | Bin 0 -> 867 bytes .../680d6e5c33be1f40552f8490c4b48092dc60b48d | 1 + .../689feb67d67a14b517b465a04f53405737559a1f | 1 + .../69ac32bf48028d8ae9178d8033d97c203a581975 | Bin 0 -> 208 bytes .../6a366c1317147c81f22beb5d30508ba99f9cfc1a | Bin 0 -> 74 bytes .../6ee5029e3f543c4b4c0aaf35ed145faf7d0e801b | Bin 0 -> 269 bytes .../6fcd960ca2930b6937c917eecb9260a0aa09c84a | Bin 0 -> 859 bytes .../73a3ced41d5b17c23f7dc9bc9f14fa4d54bcbcf6 | Bin 0 -> 1342 bytes .../76a328c4bdcf451f29c126bf8afdb2fe7959f6de | Bin 0 -> 105 bytes .../79ef2ee1dbd00cc89471b5a14e9e5d1ddf72433c | Bin 0 -> 8 bytes .../7f41b5802c84844391268f34b64754a448042ac7 | Bin 0 -> 1500 bytes .../80904ef56b525af4d82b26c38ee9ed84fbe0e8aa | Bin 0 -> 23 bytes .../80a2f44ca0165122312c549c2d3041e22ec72bb2 | 1 + .../83631c962f6eb3da79b4ac7c8c7074b8d6227679 | 1 + .../8441252d77c0917fc6c320cfbf39750f4199ece0 | Bin 0 -> 42 bytes .../858e8a25126145e8652b1c7b343ed9ff1f6c553f | Bin 0 -> 1925 bytes .../8a5c1ec4919c4969acb7773394d0a6be0db6b095 | 1 + .../8b00d59cd338662b7c1dedbe6e59a79cf0c6c68f | 1 + .../8f34b6450307981b6781762ac91d95be712b356e | Bin 0 -> 153 bytes .../9081ee6e4c227d5358b1f1ddc5c0cbe028bd8dda | 1 + .../9170a32e0626ef41739a17e35b953834eb1c5615 | Bin 0 -> 43 bytes .../92bc0af3e1560941650609e3838e9f2a8368ae05 | 2 + .../9405f4e8857cfd57af09922f2288c7a3ecb3ae37 | Bin 0 -> 151 bytes .../954f87b690e4197ce18370cc095e38f19d46079e | Bin 0 -> 73 bytes .../95c8e1e713d2ae5295f770d12f179f1f3a1ccd50 | 1 + .../9b232d55db40c0c0f37d1a1e32900ccc8cf6fa3c | Bin 0 -> 61 bytes .../9bc313bbd93a1b7255982a0b530216f895f1e7e9 | Bin 0 -> 2055 bytes .../a5129c501ad4d923bab9f5a6bd2c5285c29a3b3b | Bin 0 -> 103 bytes .../a5e860ac13a20ab2f18783407f78bb905a0963eb | Bin 0 -> 1461 bytes .../a6fe820db6653fb5927c1a6bd8f51312efa25066 | Bin 0 -> 152 bytes .../a86035f1a172b4fb88a7a69a7067fd47e2e27879 | Bin 0 -> 102 bytes .../ac2592e04c8ccbd9fce8ee3e3b24936bacbea892 | Bin 0 -> 2164 bytes .../af28dd714ec6294a073e197f8dd7d71bcb6f1e2c | 1 + .../b0c497a1362aaf4a88c748cd0cb7d7e9f42335a9 | Bin 0 -> 723 bytes .../b5bef5ad04216ad1f791e597955d8d8186d62708 | Bin 0 -> 130 bytes .../b5e0d763f52cbcff1901a681e4c20e2779199010 | 1 + .../b8519b2ff0c0594b3efb263a8fbab2c95f47cb4f | Bin 0 -> 34 bytes .../b95f6fb075e53d512a044a2360f433369b040e2a | Bin 0 -> 194 bytes .../ba89b5c3dcd4dfc793072a98906602abe615d3df | Bin 0 -> 528 bytes .../bbde76499882a6ff1e92ed9e5450b9d1b403250d | Bin 0 -> 9 bytes .../bcb4b1979366bc14e35ecceef03f26a476f91538 | Bin 0 -> 68 bytes .../beca236cd931cf5352ec7b89411909a4b44c9138 | Bin 0 -> 1054 bytes .../c1cebe31fadd74fc77b17ce6c0e44ef289444c6d | 1 + .../c340e8e3f8b1bff333981c8d463daddd5ff4e855 | Bin 0 -> 850 bytes .../c68eef36f0848d2dc34d212d294f37ce490d3258 | Bin 0 -> 286 bytes .../c69ca63f0353737b22874f88f5a67dafc1bf7d44 | Bin 0 -> 1093 bytes .../ce6b603fce80719da46c97eb1b95bbd0ad777070 | Bin 0 -> 357 bytes .../ce8fbfa93be2bb9182b40186316e43da0dbc55d8 | Bin 0 -> 81 bytes .../d0476e429d72246b03d172241b0d201c7f012be8 | 1 + .../d1f6790b8477c7e41e3dc072c24b4b80aafc6739 | 1 + .../d56083163211e89f5cfa50e8ae80d1a11d03c250 | Bin 0 -> 1060 bytes .../d8db49096b062b619719f6308c8d2b9cf043c7c2 | 1 + .../d8dcf7b34858f2f7e7d8e50337bd68bc4b4f4fb0 | Bin 0 -> 77 bytes .../d9bf92f929213b053f6e37ef4e18c9533d0d42ff | 1 + .../dae54cc5b98acbe40db9a826182e66c06dc6872b | 1 + .../db178237414743cf16da250d10ffd0ae98bd127f | 1 + .../dbb873b6c49161fb72609a09c79b1b4ef461e3f7 | Bin 0 -> 27 bytes .../dbee5c3fa40e7883ee26d33234ed6364cb7b3da6 | Bin 0 -> 437 bytes .../dd735e0d38c3775492fc9d0346516eb675c47428 | Bin 0 -> 99 bytes .../ddb98f7964ea51bb468c9fa93af5f11bfc072627 | Bin 0 -> 528 bytes .../e3c1912a734aa51cc75fb7e67db525f34ac1e43e | 1 + .../e76108ff6580c8809875c5051c8a3df9ce8fc85a | Bin 0 -> 1108 bytes .../ebd0b9c4978407a17b7331e0562dc9ad31b29204 | 1 + .../f0ab531075130e5e92df690fa7311dafed5b43bc | Bin 0 -> 168 bytes .../f0b7597e0a424ca259bbd593ebf179789dbc0c09 | Bin 0 -> 220 bytes .../f573e80e11c969b592809f357dc72eb3caf356dd | 1 + .../f69a22307982dab12f462040e386daba86052e2c | Bin 0 -> 830 bytes .../f82023faffb3b3e67d5d587caa6b53ab10f27fb6 | Bin 0 -> 19 bytes .../fa30ba2c9565dcccb091ade5dbab902e0cf0c3b4 | Bin 0 -> 720 bytes .../fab44564f0279bbfeddbbdfe97a92b882d7a3e9c | 1 + .../fafe20628a68c12b150c9af37e24c36f74672288 | 1 + .../fed40fead812cb12d7906402be2efb5a39ff84c6 | Bin 0 -> 126 bytes fuzz/fuzz_serialization.cpp | 139 ++++++ src/include/ndpi_api.h | 20 + src/lib/ndpi_serializer.c | 395 ++++++++++++++---- tests/unit/unit.c | 15 +- 144 files changed, 564 insertions(+), 78 deletions(-) create mode 100644 fuzz/corpus/fuzz_serialization/0067200701e9b0b5ec3db13f387a75e9e82202b0 create mode 100644 fuzz/corpus/fuzz_serialization/00ba573f9435b38d7205d995bbfe1813add81ab3 create mode 100644 fuzz/corpus/fuzz_serialization/0228f43998915b3c03c642cadacb0fc9f34ad80f create mode 100644 fuzz/corpus/fuzz_serialization/03e684ba5d7a6306ddfb1dd15f40f2c4a1a074ee create mode 100644 fuzz/corpus/fuzz_serialization/07d9e6281c5355f19da85e221fc562ec2d877e3b create mode 100644 fuzz/corpus/fuzz_serialization/07dda5cbda20802250efce051169313efcc19c91 create mode 100644 fuzz/corpus/fuzz_serialization/0826de64028c8e890d2c9f95ee0ac3180ad45431 create mode 100644 fuzz/corpus/fuzz_serialization/09251a8df7e23a0e332eb0beee7afdec7e48fc7d create mode 100644 fuzz/corpus/fuzz_serialization/0cf7de690bf6e03f2843688fef7e5fa6f8f5b50a create mode 100644 fuzz/corpus/fuzz_serialization/0f6e2d10bdff7d0f0f6ce142c9fa4d2a22d39fdb create mode 100644 fuzz/corpus/fuzz_serialization/1019a3c07fe32d6fab2e673671f557717d4997d7 create mode 100644 fuzz/corpus/fuzz_serialization/102b9366042c4c2ada3408c1808bc8cae19199e6 create mode 100644 fuzz/corpus/fuzz_serialization/111bf62468546c168ac3da1052ec3bf12c51d927 create mode 100644 fuzz/corpus/fuzz_serialization/123959e688316f1156b5fd63115e66990691dab8 create mode 100644 fuzz/corpus/fuzz_serialization/1599e9fa41ec68c80230491902786bee889f5bcb create mode 100644 fuzz/corpus/fuzz_serialization/1799f48cfbb2ab6b1110385ff98bb8c46313cdec create mode 100644 fuzz/corpus/fuzz_serialization/1835e91fe48390e58af954a32fd7c76f31bd9589 create mode 100644 fuzz/corpus/fuzz_serialization/1a8f29ec0d35809a410d5491f71238139e481538 create mode 100644 fuzz/corpus/fuzz_serialization/1af6e9701b53c33f27e958848e077cc8663f2d49 create mode 100644 fuzz/corpus/fuzz_serialization/1b9853e05cb525c5e3f95cc351e6af1d93169e21 create mode 100644 fuzz/corpus/fuzz_serialization/1c1f0a2fb6bce1b4efad57e900e1dea1884b31b5 create mode 100644 fuzz/corpus/fuzz_serialization/1d25ea7808bdc1960f4fa0b1265d348157676d34 create mode 100644 fuzz/corpus/fuzz_serialization/212f0b6f4f250553420c4b462b6adfbca29667e7 create mode 100644 fuzz/corpus/fuzz_serialization/22180792385106ce0b6ce830e1ff76f431a01c9d create mode 100644 fuzz/corpus/fuzz_serialization/23d2435c588ac50944b11976815bf162f433e0ab create mode 100644 fuzz/corpus/fuzz_serialization/25885772862548d55ad11ac6b1913a2b7a9f2513 create mode 100644 fuzz/corpus/fuzz_serialization/2c16853a4cc039ea91f734590db769824ae54318 create mode 100644 fuzz/corpus/fuzz_serialization/2f10304d880a3bceb43f89514ff7661474d818f9 create mode 100644 fuzz/corpus/fuzz_serialization/30fba8556db34f5d467c0d677fe176564b377748 create mode 100644 fuzz/corpus/fuzz_serialization/33a78cbd4539e3757769bb950283c7f8a340f20d create mode 100644 fuzz/corpus/fuzz_serialization/36a23d77f4380edecd3ba002c371f2e9ebfe4fc2 create mode 100644 fuzz/corpus/fuzz_serialization/38eba3bacca0984d08666561e863d816fae7bd79 create mode 100644 fuzz/corpus/fuzz_serialization/39a7293fe98a37dbd3bb56eafebff914df2e0835 create mode 100644 fuzz/corpus/fuzz_serialization/3a474dedd7c902caa19c0aea83735fe5805b5ae5 create mode 100644 fuzz/corpus/fuzz_serialization/3c49269686ee0c250a2d977a86d965727418ebe0 create mode 100644 fuzz/corpus/fuzz_serialization/3ccc20957ca1de354f0911587f3f6a89bf639bbe create mode 100644 fuzz/corpus/fuzz_serialization/3eec95f5cdf41fd6200a215e24d60f3bede4fa18 create mode 100644 fuzz/corpus/fuzz_serialization/44613cadc2a119c0445d8aca742ddaa6e9d14f15 create mode 100644 fuzz/corpus/fuzz_serialization/44c16af83b7bfe485630ec7417a8a93dd6a4f344 create mode 100644 fuzz/corpus/fuzz_serialization/4599f42df4bd96e578ca04c9f530bce55f85c593 create mode 100644 fuzz/corpus/fuzz_serialization/46220eb9c32d8f39af7842340be4410bbc6b0acf create mode 100644 fuzz/corpus/fuzz_serialization/47102208d3296068fd9d922e8794d5614bf673b4 create mode 100644 fuzz/corpus/fuzz_serialization/485ffdac621c7a2fe64c49a9d43218c4297b0291 create mode 100644 fuzz/corpus/fuzz_serialization/4a3ac753e86aee22a1fba2144d452def73f5d445 create mode 100644 fuzz/corpus/fuzz_serialization/4a4cc4a8eea5e60045f94339f31c6a70a6fd0b68 create mode 100644 fuzz/corpus/fuzz_serialization/4c9b56fa31b381b7fb82fa698c6f3a756af8cc3c create mode 100644 fuzz/corpus/fuzz_serialization/4d4eb9538c5dcf8eb485e7b1d25e476926375abb create mode 100644 fuzz/corpus/fuzz_serialization/4e39c82f78d2c2109122e62d29a7e6b244d4e466 create mode 100644 fuzz/corpus/fuzz_serialization/4f13e492e5330e2b0ac7cfd33bdb6f68e51da838 create mode 100644 fuzz/corpus/fuzz_serialization/50f7bf3ec485cf36e17c682136cf193664a54ec6 create mode 100644 fuzz/corpus/fuzz_serialization/524d8a5744ca12baee06ac2d445758e0839e6cae create mode 100644 fuzz/corpus/fuzz_serialization/531faf1813c549e0360c85b7eb48e8027d4cedca create mode 100644 fuzz/corpus/fuzz_serialization/54a1f0e11a61f82bfc474938c0d9109e263d918c create mode 100644 fuzz/corpus/fuzz_serialization/5528584ddeb60c8e7ea81d4c0bc4227734eeb393 create mode 100644 fuzz/corpus/fuzz_serialization/55ccac63fbaaefbb92a099f0b7a53dee3d3066b3 create mode 100644 fuzz/corpus/fuzz_serialization/5654db3776d1ca71a669fca63266a558e0fd9de5 create mode 100644 fuzz/corpus/fuzz_serialization/592504fa45d5574c992ce453dbce57c85cd8c7d5 create mode 100644 fuzz/corpus/fuzz_serialization/592d762aa688783a742e8f8a17dde6fef0e6b5d6 create mode 100644 fuzz/corpus/fuzz_serialization/596704a7ad7f8f8707f5b78d18e15d341dc39d81 create mode 100644 fuzz/corpus/fuzz_serialization/5ad5bc1d2fd6dcceea9fa2f0ad47687af9d4b363 create mode 100644 fuzz/corpus/fuzz_serialization/5e90850401034e03214848e68ac58a16eb4500ce create mode 100644 fuzz/corpus/fuzz_serialization/62691b118afe47b94cb40c796bdef339d0d988d8 create mode 100644 fuzz/corpus/fuzz_serialization/63d993bb60fffd7db971b2cd6a4705bc8b1a48b1 create mode 100644 fuzz/corpus/fuzz_serialization/65b3da6770c4f54774165c7d38dbe3798014aed1 create mode 100644 fuzz/corpus/fuzz_serialization/65f4e4a70975970600b24ab9bad2fd4566811401 create mode 100644 fuzz/corpus/fuzz_serialization/67da0bbde8a646154e47bf2aa07a6c8d9dbc1b3d create mode 100644 fuzz/corpus/fuzz_serialization/680d6e5c33be1f40552f8490c4b48092dc60b48d create mode 100644 fuzz/corpus/fuzz_serialization/689feb67d67a14b517b465a04f53405737559a1f create mode 100644 fuzz/corpus/fuzz_serialization/69ac32bf48028d8ae9178d8033d97c203a581975 create mode 100644 fuzz/corpus/fuzz_serialization/6a366c1317147c81f22beb5d30508ba99f9cfc1a create mode 100644 fuzz/corpus/fuzz_serialization/6ee5029e3f543c4b4c0aaf35ed145faf7d0e801b create mode 100644 fuzz/corpus/fuzz_serialization/6fcd960ca2930b6937c917eecb9260a0aa09c84a create mode 100644 fuzz/corpus/fuzz_serialization/73a3ced41d5b17c23f7dc9bc9f14fa4d54bcbcf6 create mode 100644 fuzz/corpus/fuzz_serialization/76a328c4bdcf451f29c126bf8afdb2fe7959f6de create mode 100644 fuzz/corpus/fuzz_serialization/79ef2ee1dbd00cc89471b5a14e9e5d1ddf72433c create mode 100644 fuzz/corpus/fuzz_serialization/7f41b5802c84844391268f34b64754a448042ac7 create mode 100644 fuzz/corpus/fuzz_serialization/80904ef56b525af4d82b26c38ee9ed84fbe0e8aa create mode 100644 fuzz/corpus/fuzz_serialization/80a2f44ca0165122312c549c2d3041e22ec72bb2 create mode 100644 fuzz/corpus/fuzz_serialization/83631c962f6eb3da79b4ac7c8c7074b8d6227679 create mode 100644 fuzz/corpus/fuzz_serialization/8441252d77c0917fc6c320cfbf39750f4199ece0 create mode 100644 fuzz/corpus/fuzz_serialization/858e8a25126145e8652b1c7b343ed9ff1f6c553f create mode 100644 fuzz/corpus/fuzz_serialization/8a5c1ec4919c4969acb7773394d0a6be0db6b095 create mode 100644 fuzz/corpus/fuzz_serialization/8b00d59cd338662b7c1dedbe6e59a79cf0c6c68f create mode 100644 fuzz/corpus/fuzz_serialization/8f34b6450307981b6781762ac91d95be712b356e create mode 100644 fuzz/corpus/fuzz_serialization/9081ee6e4c227d5358b1f1ddc5c0cbe028bd8dda create mode 100644 fuzz/corpus/fuzz_serialization/9170a32e0626ef41739a17e35b953834eb1c5615 create mode 100644 fuzz/corpus/fuzz_serialization/92bc0af3e1560941650609e3838e9f2a8368ae05 create mode 100644 fuzz/corpus/fuzz_serialization/9405f4e8857cfd57af09922f2288c7a3ecb3ae37 create mode 100644 fuzz/corpus/fuzz_serialization/954f87b690e4197ce18370cc095e38f19d46079e create mode 100644 fuzz/corpus/fuzz_serialization/95c8e1e713d2ae5295f770d12f179f1f3a1ccd50 create mode 100644 fuzz/corpus/fuzz_serialization/9b232d55db40c0c0f37d1a1e32900ccc8cf6fa3c create mode 100644 fuzz/corpus/fuzz_serialization/9bc313bbd93a1b7255982a0b530216f895f1e7e9 create mode 100644 fuzz/corpus/fuzz_serialization/a5129c501ad4d923bab9f5a6bd2c5285c29a3b3b create mode 100644 fuzz/corpus/fuzz_serialization/a5e860ac13a20ab2f18783407f78bb905a0963eb create mode 100644 fuzz/corpus/fuzz_serialization/a6fe820db6653fb5927c1a6bd8f51312efa25066 create mode 100644 fuzz/corpus/fuzz_serialization/a86035f1a172b4fb88a7a69a7067fd47e2e27879 create mode 100644 fuzz/corpus/fuzz_serialization/ac2592e04c8ccbd9fce8ee3e3b24936bacbea892 create mode 100644 fuzz/corpus/fuzz_serialization/af28dd714ec6294a073e197f8dd7d71bcb6f1e2c create mode 100644 fuzz/corpus/fuzz_serialization/b0c497a1362aaf4a88c748cd0cb7d7e9f42335a9 create mode 100644 fuzz/corpus/fuzz_serialization/b5bef5ad04216ad1f791e597955d8d8186d62708 create mode 100644 fuzz/corpus/fuzz_serialization/b5e0d763f52cbcff1901a681e4c20e2779199010 create mode 100644 fuzz/corpus/fuzz_serialization/b8519b2ff0c0594b3efb263a8fbab2c95f47cb4f create mode 100644 fuzz/corpus/fuzz_serialization/b95f6fb075e53d512a044a2360f433369b040e2a create mode 100644 fuzz/corpus/fuzz_serialization/ba89b5c3dcd4dfc793072a98906602abe615d3df create mode 100644 fuzz/corpus/fuzz_serialization/bbde76499882a6ff1e92ed9e5450b9d1b403250d create mode 100644 fuzz/corpus/fuzz_serialization/bcb4b1979366bc14e35ecceef03f26a476f91538 create mode 100644 fuzz/corpus/fuzz_serialization/beca236cd931cf5352ec7b89411909a4b44c9138 create mode 100644 fuzz/corpus/fuzz_serialization/c1cebe31fadd74fc77b17ce6c0e44ef289444c6d create mode 100644 fuzz/corpus/fuzz_serialization/c340e8e3f8b1bff333981c8d463daddd5ff4e855 create mode 100644 fuzz/corpus/fuzz_serialization/c68eef36f0848d2dc34d212d294f37ce490d3258 create mode 100644 fuzz/corpus/fuzz_serialization/c69ca63f0353737b22874f88f5a67dafc1bf7d44 create mode 100644 fuzz/corpus/fuzz_serialization/ce6b603fce80719da46c97eb1b95bbd0ad777070 create mode 100644 fuzz/corpus/fuzz_serialization/ce8fbfa93be2bb9182b40186316e43da0dbc55d8 create mode 100644 fuzz/corpus/fuzz_serialization/d0476e429d72246b03d172241b0d201c7f012be8 create mode 100644 fuzz/corpus/fuzz_serialization/d1f6790b8477c7e41e3dc072c24b4b80aafc6739 create mode 100644 fuzz/corpus/fuzz_serialization/d56083163211e89f5cfa50e8ae80d1a11d03c250 create mode 100644 fuzz/corpus/fuzz_serialization/d8db49096b062b619719f6308c8d2b9cf043c7c2 create mode 100644 fuzz/corpus/fuzz_serialization/d8dcf7b34858f2f7e7d8e50337bd68bc4b4f4fb0 create mode 100644 fuzz/corpus/fuzz_serialization/d9bf92f929213b053f6e37ef4e18c9533d0d42ff create mode 100644 fuzz/corpus/fuzz_serialization/dae54cc5b98acbe40db9a826182e66c06dc6872b create mode 100644 fuzz/corpus/fuzz_serialization/db178237414743cf16da250d10ffd0ae98bd127f create mode 100644 fuzz/corpus/fuzz_serialization/dbb873b6c49161fb72609a09c79b1b4ef461e3f7 create mode 100644 fuzz/corpus/fuzz_serialization/dbee5c3fa40e7883ee26d33234ed6364cb7b3da6 create mode 100644 fuzz/corpus/fuzz_serialization/dd735e0d38c3775492fc9d0346516eb675c47428 create mode 100644 fuzz/corpus/fuzz_serialization/ddb98f7964ea51bb468c9fa93af5f11bfc072627 create mode 100644 fuzz/corpus/fuzz_serialization/e3c1912a734aa51cc75fb7e67db525f34ac1e43e create mode 100644 fuzz/corpus/fuzz_serialization/e76108ff6580c8809875c5051c8a3df9ce8fc85a create mode 100644 fuzz/corpus/fuzz_serialization/ebd0b9c4978407a17b7331e0562dc9ad31b29204 create mode 100644 fuzz/corpus/fuzz_serialization/f0ab531075130e5e92df690fa7311dafed5b43bc create mode 100644 fuzz/corpus/fuzz_serialization/f0b7597e0a424ca259bbd593ebf179789dbc0c09 create mode 100644 fuzz/corpus/fuzz_serialization/f573e80e11c969b592809f357dc72eb3caf356dd create mode 100644 fuzz/corpus/fuzz_serialization/f69a22307982dab12f462040e386daba86052e2c create mode 100644 fuzz/corpus/fuzz_serialization/f82023faffb3b3e67d5d587caa6b53ab10f27fb6 create mode 100644 fuzz/corpus/fuzz_serialization/fa30ba2c9565dcccb091ade5dbab902e0cf0c3b4 create mode 100644 fuzz/corpus/fuzz_serialization/fab44564f0279bbfeddbbdfe97a92b882d7a3e9c create mode 100644 fuzz/corpus/fuzz_serialization/fafe20628a68c12b150c9af37e24c36f74672288 create mode 100644 fuzz/corpus/fuzz_serialization/fed40fead812cb12d7906402be2efb5a39ff84c6 create mode 100644 fuzz/fuzz_serialization.cpp 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 0000000000000000000000000000000000000000..b7ffcef42d66f948f09c99543da1a2fe2315290b GIT binary patch literal 34 qcmd<@y};cfqpbequ^R(}-z4oc^9O4`$X@2y%VoN}c23Kq`{DrUUJj%H literal 0 HcmV?d00001 diff --git a/fuzz/corpus/fuzz_serialization/00ba573f9435b38d7205d995bbfe1813add81ab3 b/fuzz/corpus/fuzz_serialization/00ba573f9435b38d7205d995bbfe1813add81ab3 new file mode 100644 index 0000000000000000000000000000000000000000..79d7380b1182f164cabfd258669c889745b61bdf GIT binary patch literal 337 zcmd<@HTY8fs+9E=TSeZEe@`BrpExaUl6IQ8;<5h_z|(wU&4epc><@p6>9k%expqsz z#m?}PD*t|(ullSsP41MFUzJm#!`@r7lhcpS=6Q%<@!P1%-F^SEk1RleW`r|?zXTkz zuu5I@(fHNU9kZ@&m^-thK`LR#iT_ixZSFXo@oJQN<$luSaXQ1C=f1Ol`o6cCD$!}} z)W!e=LJSPgp6Llc)9)!;HRGIed*p%I2Q_M9iyZzx(KwYeeLxjXYmZT?m5T%Ki^2w-E9K~Z-p=K zo+&tQ>4OTV*>ff0=Nyg>O*wHie6H~a&lB4p%E!hs?tix5?*jLhx!b>gl6Pd?12PfB iM3`!%9&0;~!=p3fd|2*3X641V>SH$ciJWODHUj|3j6|sb literal 0 HcmV?d00001 diff --git a/fuzz/corpus/fuzz_serialization/07dda5cbda20802250efce051169313efcc19c91 b/fuzz/corpus/fuzz_serialization/07dda5cbda20802250efce051169313efcc19c91 new file mode 100644 index 0000000000000000000000000000000000000000..897cb5955643a4fe667220c1c1940f8bde09d39a GIT binary patch literal 540 zcmV+%0^|LCoP?Hu8eq7{f0b)I+(OJsfgb8d$ui?-05I-|tFMvL=S`ar|E+WP+M8o% z$D0h{4?HCv-S6p;SmyN4%wC#M4!hYfM6gDTjZ)l-pJ_u-aX;9*EJcG)81ZuL|MzQ( zh$De7bTU_1r%P>8p_mk`=B+K(+D8#@^Qa#q`TXGzZy?%FFLJbDI*Og_6`b*o+R$NeKUh!hmByNPS(g@4-xb%*)gVMZ!w zW|MCcid9I>bg=hGx}!L;wg%2Ej5!f#Ur2S^D%-^~UAbHcEiXOBSp`9BM9fS*kCAiVdLvazaJOrl6iT9COV(8Bp0^|~L z1 e=HxeTcWbM^{7qiRB`p`21)Z^mMJ_&a#aZ@1{|dtZ literal 0 HcmV?d00001 diff --git a/fuzz/corpus/fuzz_serialization/0826de64028c8e890d2c9f95ee0ac3180ad45431 b/fuzz/corpus/fuzz_serialization/0826de64028c8e890d2c9f95ee0ac3180ad45431 new file mode 100644 index 0000000000000000000000000000000000000000..6a5aa7fe9207d9253d53eab5980b17171eb22444 GIT binary patch literal 9 Qcmd<@HDzFEd30YK01Wm6E&u=k literal 0 HcmV?d00001 diff --git a/fuzz/corpus/fuzz_serialization/09251a8df7e23a0e332eb0beee7afdec7e48fc7d b/fuzz/corpus/fuzz_serialization/09251a8df7e23a0e332eb0beee7afdec7e48fc7d new file mode 100644 index 0000000000000000000000000000000000000000..23ddd25cd1fa99f1ccdfd8033db200c718400198 GIT binary patch literal 561 zcmb=O(=yGaZDwn!8Pk;@+f5sG&wVQU+a>!U0|Nu!Pp_SmS8Y0EX_dO@qw%YyJ7!(m zFn4B0gH*zf6ZKQGZSFXo@oJQN<$luSaXN#+yN=cCCtg~?eq!~#^f1X~wfD~RFK=a8 zw>W*OkhRgb7spT64)OlAHF$%$Smr`D}mimjE<7 znHf;+)IqUx&U4?{KYia@O_k`hc4`v{*JbH^<{!JnV{*jJnX-?W@()WIuX-E*yzlA^ zUTd}+t-Q5Y`Twsi{(ftAa{BSvJP-M8RORlze>oxI*_ZQY;${W#?Y?Q?vcat<=uX%C zOy__?`y0D;T$}wRJ{GQEabo%P3!6aJgRk!pvFKvqKc>%2p^Y2L>G|h_#_X{QrMK0)u<7 z^uq;QM|Qr6_|_08CeiMsx#Me<^2X;AEvIgXo~2w_-njVYZ2$b0ww}$83sVv=wX9xY zl9_Vi$(3G{F3y@_h3D4Gk|($*RIM>f2)!-Ae`uwESw44_jb(zgszv#Pw=5z5^miz# z>MO2!$E7Q9^xcJ{TQfZE7KyWL|8mZ@$8x2~j;j~fm$iI5%`MDg-?n1=(t}+O*VUa} f@%8K1gZH~nfBo79WC20n4`Jzsee?e8UzP>{QNJEE literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..9e9735fe0be0109a783926a60b04f5a5ba94be50 GIT binary patch literal 65 zcmd<@HTY8fx|H>mR0WLA+wt$hiUN(t>TXXSou4?30SKltIL0x87z_-IleE)}AFTZ# Md)fWR#XMDA0MvFHb^rhX literal 0 HcmV?d00001 diff --git a/fuzz/corpus/fuzz_serialization/102b9366042c4c2ada3408c1808bc8cae19199e6 b/fuzz/corpus/fuzz_serialization/102b9366042c4c2ada3408c1808bc8cae19199e6 new file mode 100644 index 0000000000000000000000000000000000000000..44482bb8c782dcda74cdfc809d747db583c7903a GIT binary patch literal 194 zcmd<@HTY6p!TPH7wN&1Ye-~C1XgpSTd-CY~#A$Jpv~Q#ft8KXYIKlVJ3TB2Cr5vYoUjYDa#cgK* literal 0 HcmV?d00001 diff --git a/fuzz/corpus/fuzz_serialization/111bf62468546c168ac3da1052ec3bf12c51d927 b/fuzz/corpus/fuzz_serialization/111bf62468546c168ac3da1052ec3bf12c51d927 new file mode 100644 index 0000000000000000000000000000000000000000..ffcd99b5eb5cf72283a0bd128028a468d181ec36 GIT binary patch literal 74 zcmb=O(=yGa&DCrNL+zY>4NQ-l4<=5$ECl9)BxbfUG{L};owZ=aGh0i|n63nUv$e8w Q_3{Y*Q}p)D|L@sd03{M6l>h($ literal 0 HcmV?d00001 diff --git a/fuzz/corpus/fuzz_serialization/123959e688316f1156b5fd63115e66990691dab8 b/fuzz/corpus/fuzz_serialization/123959e688316f1156b5fd63115e66990691dab8 new file mode 100644 index 0000000000000000000000000000000000000000..052e339562cc811f136b1d2f9c5e8852540a851e GIT binary patch literal 343 zcmd<@HTY6p!TPH7wN&1Ye-~C1XgpSTd-CY~#A$Jpv~Q#ft8KXYIKlVJ3TB2cZdy00fl*N&o-= literal 0 HcmV?d00001 diff --git a/fuzz/corpus/fuzz_serialization/1835e91fe48390e58af954a32fd7c76f31bd9589 b/fuzz/corpus/fuzz_serialization/1835e91fe48390e58af954a32fd7c76f31bd9589 new file mode 100644 index 0000000000000000000000000000000000000000..e369ffa8fc05a94d918becfb8d77b0d5b0c1da18 GIT binary patch literal 748 zcmb=O(=yGaZDwn!8Pk;@+f5sG&wVQU+a>$q0y zg8?=Ts;$3W_cbs*Za$be@v@NF4(}U(i>)$rm#k6c-!;)A>||oJ`hkUFGqPvePPH}= z&#a1)dVV1B;Qj8?eLsYy8}`lnvwvBdqD8to_d+kxwug%r#H>EkD%}*T@yYhtH0Hb= zUFT6PFrlIaK*RkGHx)lzX*GAPxY$3tzZr8Ft7}ZwZWD~l44?Bvc)=x!4-fw}J=-7r zC4ldz*UrhSHXX9G;zt6hi#{5^TDoJ_wGDG;b~H#O>^M_h zItLWm-`K6=+Uzg!vFPpp@7Y})%8j;HZ11dAdHwR|M~4$G+f5D&UwHG?_(;y2;;F(n z)hW1PBn~`D#z^S9JJZWfCNsyHh$F3x@dxOa-*f_hsVYWoM{DrUU6`{o6ENB zYwu3kqBmE;DmwXpxtj!QtM@$FpU*9Rzu7XIMRr|fQDw$mb(@!E%G~Tf+*li;-!EMB Qrsk`(@B8}eKjL-)0F#PuC;$Ke literal 0 HcmV?d00001 diff --git a/fuzz/corpus/fuzz_serialization/1a8f29ec0d35809a410d5491f71238139e481538 b/fuzz/corpus/fuzz_serialization/1a8f29ec0d35809a410d5491f71238139e481538 new file mode 100644 index 0000000000000000000000000000000000000000..c448c554cb196be5bd2a33e0259a64da39f0c78d GIT binary patch literal 34 qcmb=O(=yGaZDwn!8PgT<8y%M!84?v3*cv2T@);QRFEH6!yAc5Na1C() literal 0 HcmV?d00001 diff --git a/fuzz/corpus/fuzz_serialization/1af6e9701b53c33f27e958848e077cc8663f2d49 b/fuzz/corpus/fuzz_serialization/1af6e9701b53c33f27e958848e077cc8663f2d49 new file mode 100644 index 0000000000000000000000000000000000000000..55b2120ccf2eddd3bb77062328f9e5228b08df1b GIT binary patch literal 143 zcmb>3J@=_>oJ;n@1zi6zLGJNd!$&*s?-TzrLnr>NtXA6^*;t?|Tae1V$N*U@0|+q5 m-RQXd|N1{LhoM4-;ei@9!(29q^z%O7%ejL+T#(yYbuIu>u~oSM literal 0 HcmV?d00001 diff --git a/fuzz/corpus/fuzz_serialization/1b9853e05cb525c5e3f95cc351e6af1d93169e21 b/fuzz/corpus/fuzz_serialization/1b9853e05cb525c5e3f95cc351e6af1d93169e21 new file mode 100644 index 0000000000000000000000000000000000000000..8674288b8d6f05b51c0190d2fbace37c3e8d188a GIT binary patch literal 2006 zcmb=O(=yGaZDwn!8PgT<8+?~rHZrTW{&wBh!1TEJVB*BfLS{Q^5lR>tAVBuFOZLMB zTrv>ek)3ZMzBL4jNvsmT(E%}mg#p( zwKfpXtcsF)ejxGS{qEC!9B-b~?wj{#|FSeii*$AFg)6SokR;i0V8oye)W7f3|b7yumNG0qz zQ9m`?=8oGLuSU67?k7zir!&lX?mPRZ?|ZAM5}npgZ35xCES=B%W0!bLj<`8f_VL9t z&V_=TZCI9_?EF44D(M9gZbx(7dB4L=#Sd3n%>_F%>~F>##_AfAwc7;aGQ;OQ5ngZ! z$=yG_c1~Wk=@5#$cY(n#2t|NI_z@cLs8NUNczAFfvcMHiPDFonViX>++&edD;S7;A&(`W*yX7vJ|9OSH^3OjH`STTS z{r~T;U$iCBs%!2W(K#QNdfm7uZBSpUc1Ke!itY7n8Re@BbXgy~n|=JRvT28i$ok!# z+0R?+Z?l%R|Gb;%rj?O4IbWzN)Z=W)hVLG`7MpF{#&%A($5IgLaK@VjJ*?X%v)1ay z$I5VY?Yg!{Fs{buYI;Wh%Yw5{&fMR{qfmKyL6_VXk%e=m1!Y^f8&!88C6?=;#ByGO z>4{Jw>#1ix3KQ+utZ&h2ImqLwss#B6@)EWa;4X#i?gO!;kos)2iAg#CYhT+u7*kv+ssWkoA|~~Ur=bYB6n8Hjr)nRQ_eW6s(vON zOq#rWacuqqs1psRv`P~2j literal 0 HcmV?d00001 diff --git a/fuzz/corpus/fuzz_serialization/1c1f0a2fb6bce1b4efad57e900e1dea1884b31b5 b/fuzz/corpus/fuzz_serialization/1c1f0a2fb6bce1b4efad57e900e1dea1884b31b5 new file mode 100644 index 0000000000000000000000000000000000000000..222a1b47e8a93d24e7be03642fef3f686d6f6dec GIT binary patch literal 1092 zcmb=O(=yGaZDwn!8Pk;@+f5sG&wVQU+a>$qw<8f;ZyI(k2o#f8C4Qsha?3_$)z;sx z`x=-YHy=!#cv;A7hxd)Y#a0=*OV+6J@0#clb}}(q{lG%88QC*!r&=3`GcqtRWL8B< zJwK3m@P7B{z8}KU4g2Q(*}p7J(IQ=)d!d(T+rvc*VpgANm2QgF_+G z41?GIz#o<67gtYec8Aj1WP!eHzjZBtTXu(quXc}pTzAX6b7{*e&PAkw1ZY~ol@1V* zTw}6!n_ygK_?#!g3oc1~c=)gB*?ttSgE{|+0u1<7S^3JYt1PO_xT|jSvP_wq{f8TC zL-hNFi{8|H{TYolOs^sUf#4@E5{lpsR)w)lU<`)eFcun(BUWLmw6(FvAjJ2RS2aLW Skr^Q$Bm909Xf}d}#0CJy;T?eh literal 0 HcmV?d00001 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}9p% \ 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 0000000000000000000000000000000000000000..c93b14d53ea38a1be0252b7bd2ca1d2bc76b2497 GIT binary patch literal 39 ccmd<@HTY8fy3_{=Fn|FgSVRXz{{R070Q^Y|yHhm>hmm{y_2n+N=DWYG*yZxNS8#e5R%<7XW>eE9L+I literal 0 HcmV?d00001 diff --git a/fuzz/corpus/fuzz_serialization/25885772862548d55ad11ac6b1913a2b7a9f2513 b/fuzz/corpus/fuzz_serialization/25885772862548d55ad11ac6b1913a2b7a9f2513 new file mode 100644 index 0000000000000000000000000000000000000000..fcac78825daaaa7f4b264fdf7a52b58841b8686b GIT binary patch literal 555 zcmb=O(=yGaZDwn!8Pk;@+f5sG&wVQU+a>$q0;hYX~sYG{Fqz{WkgMe^%;jWL9nc?Yggl>2dSH#EF-M%yxL+_*-n1p}S;_D*vvD9$_aF zqty>A6q}Jf({`%0fw|qMRb5?O3>*;CAmq`qmjX|oTh{&ImJ(66^3FQ)c-3UZ7k5lb z;@;iJx16^tMc8Gx%iP87QM^H~1hs;#+v~JN9Iu#HybzmUyIlW)TJCYqw1PjcIJn)- zWn1>Occ*O8o2y_Io&3Mt4QLku@Jhgwf3`^2sWP7vW;)TP27;w8r1+Th#WSm-q@Ev0 vocCw{vNT1Dban29UZQOe7cGc6@ZP-c-S3NPOjcGMRV9ZmtUlAa{PQ9J0K5Uh literal 0 HcmV?d00001 diff --git a/fuzz/corpus/fuzz_serialization/2c16853a4cc039ea91f734590db769824ae54318 b/fuzz/corpus/fuzz_serialization/2c16853a4cc039ea91f734590db769824ae54318 new file mode 100644 index 0000000000000000000000000000000000000000..cea7d5b1210e064c671e75b075032ad3a499ff94 GIT binary patch literal 36 TcmezHa3%yWFfc$_=+qJbb-om2 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..c55e8f814947c4d12146b2fcba47447d307ee372 GIT binary patch literal 35 qcmb=O(=yFvuKrK+<5Pg(KcnHQ&q@po3~F4z3Tn5S96nQ1l?wnb`w(pa literal 0 HcmV?d00001 diff --git a/fuzz/corpus/fuzz_serialization/33a78cbd4539e3757769bb950283c7f8a340f20d b/fuzz/corpus/fuzz_serialization/33a78cbd4539e3757769bb950283c7f8a340f20d new file mode 100644 index 0000000000000000000000000000000000000000..d2ec36796a8e66d262ab3aeb54e38499b5454a4c GIT binary patch literal 718 zcmb=O(=yGaZDwn!8Pk;@+f5sG&wVQU+a>$q0oIsAWe zQ{z<5F)4qpdCxh0I++%xXD<)?wwZu0tmIaBbST}^JIyShB1>Vc2VIoAcR%>`-^CgW z7b;x)r5jq}Q)3v#FMT+wa!po{$)=~vGcUwD28Nw;%)Mc){Lg(x)vSx$3#Oe~_sQ?i z=MN13?3(LYrBv=OnethE$%~yR^nkILgHP>zm1YBWY5PM#AwP14iNtJ(4 z=~F=Iy=w$=(^ppA4)gD-^WpcYo5$a^yghEc!Ox^kg`BU{!9X8E;U?Sv|Njrtpb4b^ a+aD$q0@BeQr{7)D#=e_Pa?{}E7y2fPfHo>^e@HtO} z7hIC~@bF*Lv;Dze=8_EFM4))&;Qej_j;KeHXU^LJa!ph5!Afo#nft$9bd%}3i{i08z2a8+YIi!CPpp}6Ws3dbPcfa6Yu8$DDY#hw z>s)`rf^C`tzyrst`9 zpIQ?Bcg!yJ#CUSKsKifx6f{31@<&nZt0b3S9SROhbGatx+U;e1@NV|;zsjZ^A|mT| zcV<6tt-sA$+WzxyqMKGm+T?tpu27G&B^$nb>{@KGaU0t?-5yK9jQD^M2|>Z4n*}|r z+X`80b>m}YIJ$OS+anlP<8w7VqyJ^W*(Yc2@8VIYyu6@GZi~pmxzd8NE!>T&J9f`~ zD*M|d`{4qvBRk(jd}|1NBPOv*{6@#+mW|A+t-oFOH84GHKA1T1vXI#h?;C%Mtul0% ztWo9PHPIvNWMZ`XfrVl-Pyz%wJkb2PW2y0nt6OthS%pF`Jzi?W_C9)J|7F)~#rTu8 zf2T399^b!TK5o+8%nP>Waq+)itL&4F^EOzP{$fYsPKBxBPgcIUc!Im_`9@LQd`)gM mhF={M^Rz6tx5a*17e6Q7GSl{(K&?d7=G!aGohKs#;4%O{ivf=S literal 0 HcmV?d00001 diff --git a/fuzz/corpus/fuzz_serialization/3a474dedd7c902caa19c0aea83735fe5805b5ae5 b/fuzz/corpus/fuzz_serialization/3a474dedd7c902caa19c0aea83735fe5805b5ae5 new file mode 100644 index 0000000000000000000000000000000000000000..57107923a16f660df329c4bdc314b83b34c0fb06 GIT binary patch literal 76 zcmb=O)8cd`Xg3=J2>b_=FrpR4U|@)4SYu-6MVm{_zwie zs~VHGom>D_P_X>Cshl<(v`6s#CfCb;VMS)48tzx}{-S literal 0 HcmV?d00001 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 @@ +}DaӸtاP04 \ 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 0000000000000000000000000000000000000000..0853d86aa32eb87f9be034fb162fd34c5881820b GIT binary patch literal 7 OcmZQzNW9dt`W65P@B=*n literal 0 HcmV?d00001 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 @@ +aD =;0izZXٙ6_>h{|4^iWa]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 0000000000000000000000000000000000000000..0f84de0542e2b2cf5ba84eeda111bf3ca710f87a GIT binary patch literal 1781 zcmci5X*3%M0>JUmup(MYC9WclRBPNOj&)>R9cN}z$1sFMTa1ZwgmG4@adzt#w5mFq zP{)Ky>9`U{DB_5yqUy*~4MD4}Am+oq{kCu4e%jyn|NBcnF#MXd5hun|N{DC|PEewB zRF0&;hzkMg_aol&iFVRbp?Ns)luEq?tQS(mpzyUVc`2cDe z317&%H`I_nU2NNT=%20F*!cICQIlx`)_f+SOt|_1v z5L0>n&XNvVfki9mC!W5CF#$ZBgCI*CS&Nqx!`pN<$lycj66d{9IjPcawh;dS=;qcENW7LZfaV!wAY&KaN6+q#bmvvR%?yLw|}BOWIKk#0*6yhO95ic zo*p$!;rp-&YcousU_-0>GRD>LdB}P@wnM!H%B|a+90C(RQswm`uYwT(K~_P;HH%lo zfGsA%7B%mmh0j;>IDy^v)F z!?ML;K5u{1&;;~i0RY04wMxJzsgk5;OQ0i~$*4pp#wEp)NbNjUcSVsKejU;=ujXIj zJ=_Cqm#>%7Z#WyC+EEl3Up9n3*FU2bU9?0c=((?PLVQy`73^!&`klExGB7s2RRA2PNQYGFJ?*M2L9*NDp{@0rp>9x*@Nl=z?rvL`?5HN%X7ot`hmW&dEM&botzJv0Iwtu#_PQ0Al%H92Y(s@!^9L$pi@-VLD=?4$ocOsVtczXsL4tq)X}tyi?#1*w{(y2+lrRQB$Tm~e8`E9rpY&l|5yko zZ0gREtA-;gYrOLBXf7$sv=tU`@Lg2424ovv+zc;Q`|+1CB1FWEGYItDf#$F0Ku6V0 zq%u=})ptysclU4nKdl4)!`e)7TCt_upHzG^jGd-DQC^W$>8YMdpuos3ET`;%!Owp) z9jWo#dAkBeleIlRXPm}Yj3y`I$CGI>@L4r&VUN??)7cO?4*ZYRAos77IHM#6h;}`F zfjMjXy$BxiB0bwC3sl^x_vZFRgFn?7hmo$GUnYmwxaN`Z;V*hl+%ZgTJt#@+F_q}3 zZxb`%yMGq5F4^dH{jWeLG$m6`wHo5wA9BsI|LA90JNd4r@*(cw% zU#nMD5Y6fmPtTn%Q^8@wisjS;$OjJ-pFvDP@b`072TzypMeBm5vBia}h_&6ezQX=n zR|Og7-l(?kp$_8osiB{L6e(GVKj;Fm$6)-=ZfKJ18`l(pwdhOw-Eo}kKa;la$(O!- zo5!mVM>8$r)WjY`CQ8U6nYW|~`f_Uqd4zfrOEc5AH)ZKA9I}EuNHSFo^x)Ur#!J@W@gcD*N)W@1AsH0&`w+FF1jqA3yATv;5q$F!2T-}FFqPogi#8UmCDmmR7Kv7e-~C1XgpSTd-CY~#A$JpwA0KVto_r<^L+}E~7{Qv(m&Tl7eYn6U~Jn5fj)>S!&idPOSGM3#} z1tzZi_HI{!>NTxomWs_wY=4AZe(MnPOiedqv1w1E{e2b&qJV6X?}m>nfkNY3@>@6Rxf_Q`E%P+;}2K2=C-m5gbNCgy2bZf}eIv@U*5yk(~CH-TD-Iaok3Cg6Yu7f1$+4pgD2 z&9_&WJ6}F{i;rbr;Lh9jueS-h8W<`07e?xs|FTWIs{K#z1+FkOKEtsm&a2j{ZR4Kb z3f}(9*OZ*luvqX`{Z&81`wTxJuLJb;)}~SYuwm!|55*|u=vM;*`MPgvNA<8*Ht&I-5{N7_xWhqOMxfPE$jYp zONl63d1txwX`gT3w9I3Dvb(;nR2$oe8m@|aE18ZwUNu?q#Ux?_vUX0(G?%uSt)*s6 zSAuLeZP-2csqDX9Q{>{mTD!f8_|_08Cb3HVM#trrjm+4T{&vZJxPa@(PBf*e8NXfk zH84GHKA1T1vXI#h?;C%Mtul0%tWo9PHPIvNBo|&F1B^Gk3J6FhMynrK_?2ovY)1A> z+o{%u;+a)ZQqK<%l?M@uq@FL`G3(lfxidQ&q!MUJ@6DMT zqW*|>nba9Se4OmQ>7h-Xp`1x=@l2U~o}&{c>^v#{d;bdg{Cg)b#v`Mz zQoo*Y+&lZdK1M0TUUz}i)l0X2moDJ;xux`?v;5p4iE|vE4^IDkvDlzyVfURy#YT1- z>!i;gZ~tAY*tY86x$l|pPp9*G2qqrb+p@7nigDwadck{3?`})g{+at;((3mNeK-pRb#i$W(fC_j)E*g9$A)!e-sFDr??SDUh4ZKixg&e=9G zMxU$4SVBLDPk7NKen!EVr@gjB&$a5dZ_HZySRI1RYIDgelAHF$%$SmrdAVNt!pvFK zvqKc>%2p^Y_d4g+8GGy_yUFQAQ6H{9;tpD_8uGE_Z~3e<6xWD)v(<& z&L0x@cKF?su~m3gW74*h3)aYOezJDsOV6v{mNz*+TO}vK)UkKcW3y+Uw;rB!BvtcQ zi$$3K)&OxAwu6^WWJNGey;J^uFT>@tif=#q1kDgS*Z5 z2r^0K-k1juJ#Fs)^1d30YKs~pfaCb=6Om;e8R*jpjP@IWp1c&*W+o%i>Nf0>~Z|5mp3 kx9h$JrpL_(6DPK=MRZ{JN%xLvDJ80W74*h3}CSHO~ki`Kmd$q0cRCAzVi|{$=Yp#ahc(Bo(M0vBq8y! L=PayHhm>hmmGig&H=PPwE(1%dyWc&aB|3S($f%Jd-1I7Pqukv%Mo%Q(Q Mw$hfPjgYh0Jy!DS?U0{&vZJxPVIrqUy+h zDENMBc5?dh**p*VZB*s%zJEC(;@Ow;XX0iB@a?{7;IhH3r#I+M*ZfT9fI|BlyLDWf z{UtsYz5V|^yQ@RFQNP3}JYuRi3VG$9e;)GZE8P13-(Mf< zDw^MW{*QsZ>9%{*N`u=(8 z>GNNWD}N_73eA*#<>z=~i_hNsyl0wuJ=X3%5|P#DqGbL<@RG}_Qi;<{SAuMDCJtz% ziO%`B)C+HlkH={6+^j&rD{m)s2sp;b{Hsy04*Y*R?%@ E0C0+u!~g&Q literal 0 HcmV?d00001 diff --git a/fuzz/corpus/fuzz_serialization/55ccac63fbaaefbb92a099f0b7a53dee3d3066b3 b/fuzz/corpus/fuzz_serialization/55ccac63fbaaefbb92a099f0b7a53dee3d3066b3 new file mode 100644 index 0000000000000000000000000000000000000000..6e736408741bbc0ed9dedbce1a6024cdc6fe6faf GIT binary patch literal 97 zcmb=O(=yGaZDwn!S<{suMux-!h6h?%3%HK#d=v4lAyDl9|0_ZN5kO*9g7}S&%Po(a w4<=5$EM&36`^Mj5s|?+#PBl)iRV-N6&TQXS$Xcr#A1lMrwd>lR^XF~?06UvC1poj5 literal 0 HcmV?d00001 diff --git a/fuzz/corpus/fuzz_serialization/5654db3776d1ca71a669fca63266a558e0fd9de5 b/fuzz/corpus/fuzz_serialization/5654db3776d1ca71a669fca63266a558e0fd9de5 new file mode 100644 index 0000000000000000000000000000000000000000..14c8a11d71a162e08269967a294739a7bf5a65cc GIT binary patch literal 43 ncmd-t-pI|su#y24gvCGR`<@^8I56AfaXQ1C=f1OlnuGxWz4;7K literal 0 HcmV?d00001 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@;xm \ 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 0000000000000000000000000000000000000000..ea3132db1c6464b8b7d33e619723a37c9b389049 GIT binary patch literal 541 zcmV+&0^pF0000000000000000000000000 z04&wdc!ph*LGdkZ+hO7GF0I6xYqFzmz}cjza{x7=mQuf~c!?dUwv%pd7<^O-Jl}FN zRsNzOd2c!yu0daMumbl)A;!Fo7dmey+=zq7tdP`{Kg04|i5ab}JG5}ofBMdk)5Jj6 zs5(s*WR~{~Hs5pn&g37a&|mzw!keqdT`q+d=X%v}lgx=%$t3>yH>&d@mLAGNdO~qd zK)q7vMs{P-_PLQu7wSEO9@_aT7*E`^-u`S}(pG{{SF-nIJ{*$L2M|wfHqwk-NeVv;3jRyeW&8z7xcNlhO8I=|I9<}lD35#@5f^PNov&|KzQmv z1RObw)ew=X_U^iHCDtlq1bDNgJ@}~8?Lb`SCM{^AHH?8j-vk|UO~|~eq&Su4^G+F) ft{fNaBRsO%uK0NRO=R?Dswds(hRqCRT#;=y{ zn00N#y16qu8l)0-oT#6gZF9%zj8~)F|5xrOO&+H+7`*FPy?)}Q73?Qg-%AgZ+>&V3 wHTR9^oR3SrZrqbLtgl_6xZLa9S2#F$zx(vpui+4W-w$EwhJEw?>|d4!02sGcO8@`> literal 0 HcmV?d00001 diff --git a/fuzz/corpus/fuzz_serialization/62691b118afe47b94cb40c796bdef339d0d988d8 b/fuzz/corpus/fuzz_serialization/62691b118afe47b94cb40c796bdef339d0d988d8 new file mode 100644 index 0000000000000000000000000000000000000000..30a4101b78041e01370ed4e04d2d05a5271a5b02 GIT binary patch literal 508 zcmb=O(=yGaZDwn!8IuhI1jzn&$&R8BTnVz>v|;z$ry#Q)F5o({^NrYy?3uPxtqsI8 ztD+jz4=hCHOFci3c<_Gr>AoMr(hd9O{n@`PP0_+ooqM5|Xxqa@lsSc(E?E$>`b?|z zwGDG;b~H#O>^SkRquG1SoAPgBN8da+)wQpI>2dSH#EF-M%yxL+_*-n1p^NaRca}?^ z_WAZr%Y4@-yX)&>HHi%x0VJ6u)yDRrhO6Sz*KrF*5tGUdN^MWR_1?^b9zWdS&_7jGy@2y*W1pvUx6yg8? literal 0 HcmV?d00001 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{uxn݋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 0000000000000000000000000000000000000000..5991ec2af1429e09093d938c546c970232e3cf4b GIT binary patch literal 126 zcmd<@HTY8fs+9GWR7Kv7e-~C1XgpSTd-CY~#A$JpwA0KL`EB|z00S1)eGGAo3=ja; t_+ae^*~=VUrZ<`VejiRdToo#L`B9X@lfD@J2Wq*;YnRu~X?b*C902~DJB$q02dSH#EF-M%yxL+_*-n1p}S;_D*vvD9$_aFqty>A6tkUb zZ6Kam6(#lj!0Emp!qN@<=Ka~fEKSiOU7dTOmuTC@%S!LX)TZ$Br!M+v{A%frS=Tnq zwVEo?Y39KUMY8wl{yfxOK|5h(ndLE|e9-?_ITHalNyq(}^=Y zNzM#9Jdu>?Ua@_tNY}%4b!S)1d;Q~4eDoc$aGrFp@`sZTom}9_Q1Iv$^U>V$&w)}b zk87T==1P_2-JPS$;yy#@ly~hfTc#}so6aW*^;N%b7M-@`de5s_Y(d8@OXXSTid~qx zT(Lcszw8-)P{w<6=7y+0qFoks#t$DSyKj1EQ)eh=Qd>MzCZFf%gb5}m#eeT#A)bHl zgvyDlWiy%%9@BVa^i}HDGmd*_zt_hoh1lyZkh*&5*6-2<+&;IIUUZh9J0x+AOY-ZrwTn2%v4f0yJsqV{@hIfm6^4C*k@{{R2~pGlhvHG%Yh`vb-Q VYp?Qis&V})sNHIE_)JYzE&wKHBtZZG literal 0 HcmV?d00001 diff --git a/fuzz/corpus/fuzz_serialization/6ee5029e3f543c4b4c0aaf35ed145faf7d0e801b b/fuzz/corpus/fuzz_serialization/6ee5029e3f543c4b4c0aaf35ed145faf7d0e801b new file mode 100644 index 0000000000000000000000000000000000000000..285583316b5525d7f489f967170179192492d32d GIT binary patch literal 269 zcmb=O(=yGaZDwn!8Pk;@+f5sG&wVQU+a>$q0cRCAzVi|{YQ}HZeGN>Hn-3;Vyewq4!~4eH zVyg_@C2LgqcTMyNJIRF;l=1#;{grHS>C#uV%YnTyHV=Z_)8f3tZ zSfJepA1+!Dv-(V{^rBd(jf$<mR7Kv7e-~!TN1SaFWAwRtj3wklQSIE_+kFl!vHiPw^*xgvS1+zF zYx#D%{dcKi+p2@-zGuEaUC!$vn0R1s%f=ch#*Js{1@A4ryDe4wXYPARtKT#Hjd(=U z|AZ?W>-=!MlU?>k`^NHlC-Y`63Z2lP{6Jb@>!gX-bN6n%tR(hcZOVEzpv^f5tHmc| zbcvr)Fy?8mEzxs5>+!{HtI6SM*c`+y%wpfRLQ|2qv*hf{iHBycpI)?aYmwk7E;eR^ zLsHSz$7`2Ax-b4^=f1Wz;{X4jaeg~#TdVZ@<4ONKv#!cHRJ?LHi4)M!)!$Cj(A^jw z0!QtN0*%M&ZciSaSDh9&NjuH#!P*b9mpQmhZ!-D)jy;@qxGGfg^0uYMAFgiAZDkb- zz4Umg5!?Idjs2HhvlZh{*8ZKwzu|dtk?mLT$jqEhmNuNKCoKn(pr4($A&3%te^xp*} Zi#Sv{>q1#U{JB*-7Visc;O0vV1^_2^*^2-G literal 0 HcmV?d00001 diff --git a/fuzz/corpus/fuzz_serialization/73a3ced41d5b17c23f7dc9bc9f14fa4d54bcbcf6 b/fuzz/corpus/fuzz_serialization/73a3ced41d5b17c23f7dc9bc9f14fa4d54bcbcf6 new file mode 100644 index 0000000000000000000000000000000000000000..1b8e734f214589241849b472427e3176ac0d8d1f GIT binary patch literal 1342 zcmd<@HTY8fx|H>mR7Kv7e-~C1XgpSTd-CY~#A$JpwA0KVto{>rvl?$%E&3I980mwIA6xm;A@CqD|B9}@YaDE3v7 z%dZXvho!k(thsi3*9hdMudKQq=HFGv@3VYfd)#{CpGlhvIbR9gd{cj;INYrDwWm1u ztw&J`PxK$C0(Yt^(C- zTFERGo0r)BSaJESL(DTZ-HgSiJ&pGFS!9cRPwZK>#A52R&wi4V*U5;#QMTE%W2y0n zt6Ot{j-TezHnX+VjOj`%t5E2r$4iab-bZijzwDZ=7=N<%?=%M1UY53Lk1%jd4Lu}qLwwJ4wPmL=q${tiV|eZ@8J#H&-bMI5S}b)l>ve($Os zi|d^=olczLNpfb;;fY+aeW^&-!*z9MSIm3;<57I{9kFnpbg%Lncz{7t^UgOB-x>nN zBvwKEnYP8nD%^dC=juIcl2=+5FQ`0^FD7U$r}v!`6oFWQ_?H)55vvU_!J`(dp3S+Kz#aVmf5U0+--0S!P*BrwH~!C( cYx|$*$9?kdJ8B3_m!PD{#RbfDKqalE0Iejr@&Et; literal 0 HcmV?d00001 diff --git a/fuzz/corpus/fuzz_serialization/76a328c4bdcf451f29c126bf8afdb2fe7959f6de b/fuzz/corpus/fuzz_serialization/76a328c4bdcf451f29c126bf8afdb2fe7959f6de new file mode 100644 index 0000000000000000000000000000000000000000..d58ebc3a237ed8d3dd492a12381801963ee51cd5 GIT binary patch literal 105 zcmb=O(=yGaZDtb#!+&(30TggT1x5M=cYEpAX>zBW{HmM^9rgyja4So`_-*GzZ}C^Q z&2qPXYDxItF}u_gC=;oXMqyj^{fPvZouWfKixF_mw6o;F&zV>wBzV#?d;fekO zwcO*i%OBkr|FUym+Zyrz|IawTowTi0`u*{wf1X)aP>dc4$#?S1sd{>!e}it#6F|4w0GJ-&axeB7kFnHOx$|@RDb0 z_2LJdKerj5;n)-BRcqC@anElBZ~x_MN=|54EO@K_s-NNg%oo!R274O(by^{D=+o*2b(vn%Gk{_!Y2`i@vQPr6rm&6*c4uDvNu$m@7G`OwJ)o(u(#ZZRLtE&m)S z#qzl332UxYS>D|_x-9N@M1n;%B)uFq9m>1%&5h%T+$+ttx7wb|LSM~2{q@a3?mufk zblq2G2(9)zw5#V~LejNMes8acDaI8|x)kIk-mvEN->%KKXJ%Z}E91R6b3@c0(Jsq6 z!UU6(;=lK=kk7w&LgmEOvKdVWk7+zI`YQG78OOb| z-|J(PLhN-HNL{^j>v!n_Zl7C9FFMQ59g;Z5@%iBNzZZ)QY8H0iSyXIfr?F1@{PFhR zrHXB<4xam-`Tle|uZLjbfxRsoYor)Ao~akSxAg9|RPCR+?LWA-HX@RYiCSJ|myYaG;*n71p>(yq;N93Gs6JzwbdWs{%@4|`#jmPS4Pad70I4y3HcAEKvwI5_Jb8wm7Wb*rc zIPHvrF;9DKiJoiKZQq!+^mL~ws?}zaS0p#>ikT*{k>e z@r^sKsw+N&ReA2lHdj5nqN9=D{ujOAS{o)|-?Kh%$H6wQt6{rmoIfP)?eM!NW2^A0 z#-wd07p#%n{ABIMm!4O@EpKvuwn|Roa8;<}Ww+_QD;Jsjzg~2c>AQ>Ku|2)wR{3go PI+{mR7Kv7e-~C1XgpSTd-CY~#A$JpwA0KVto_r;f3Onvs*Pjd1)8SyvDHk)=#I%lq!c$rNx{Cb)Cv)K$U zc@|ecn9BKc+fw5XSGVT2vI>P>dc4$#?S1sd{>!e}it#6F|4w6IJ-&axeB7kFnHOv= z;^Ke3R@o;T=WVbo{l$*NotX)~UsmXq8dmFbZgX$EbNq%$0AsG$>c&pH4$diibWf!T z>hD%K^dtYcs;>A9R^_=H+g$bRijGEp`(N~eYi*c>eb4&59S7UIu7>TNasH6Fx5MwA zjIF|}8k4r2T(CxN^OLn3UwU5sw!F#t*(x~+rjEUn9-BS;y!G&;BdMCdS}el+w+4v2 zupLDBXKMB02SEQYU{S_9O8@1H*4J3 za{p2PtFZXTf!UwqBC;|?GuKr&t=%A<3wMVRHh0`HDVdpeoMro$bGAK}D@}G>y|})t<=bg)VHW$g72B5{?0UGa?(B+ruYWwc z#e6ik{Bxib%j23SthrKUd3WdNvbf(72^Q6m^m5pADDTQQH;yB6uQc1l&>fpKWneR`}{Ouu_cwleK#u_Qcjc1hW1@A4ryDe4wXYPARtKT#Hjd(=U z|AZ?W>-=!MlU?>k`^NHlC-Y`63Z2lP{6Jb@>!gWSbN6n%tR(hcZOVGJneq`iXWPUW zeXbs33H=~G;YFAD83kjW_SzCXSFv!Obg%N7H7{OVdsCW_*YR-jp_2^rEN_*B@~QEmsZs*z&i0)|r~B-19Ztiqvk%tNz>Xc5C5{bm6ON z8yK{w|6tiju@Ao-Y{Nh4e=0>i}bNF{; zh5xjpJG~8=C&#_(cJY34@6N;%i_fj97TPKE>nx{+OQKo!bm5aP&xh?u^x>}C%9jvt znVceWm0|WhiAxo(2ZD^4md;rD?tO)&bNl=o^EXx&rXAk%S@(n8w%kSUT4MgST(fzi a9?K)K$%(np&}r6doA#^wf*QE_5`zJaZmU{Wp>gMrxEpLxoZ}2l|Qz7RobuiF}P`JtV|NsAkG-v|p|Mmxp|JPpS|F0VI OvE^_1EZH+PRk;8iP(oY) literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..b19b77229925263d7bffaa7a87f94acf595cab26 GIT binary patch literal 43 jcmd-VjH_W_kQS6};cisjaq*0E;cvms3=9ewVqPi$5$6sS literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..3aab7d5797d5caee08e3d3b4d314af6a846edb0b GIT binary patch literal 151 zcmb=O(=yFvuKrK+RiBln$sK3SwVMI~R~Q(?o>yHhm>hmmGig&H=PPwE(1%dC$@c&M|ARDW0_p$u2a5mKUgiI}Zfm*m0tM zYIet0O@;}H3{W7%zzAYN!|@-3>c9PNw-(+=7rv^t;ct2pIqrR>Ef&@R(Ni`EO~;9Le&~`IZtU7pmS{Q0E4IzBih`~rCmMHF)7?P zcKU)sqZPTcT5jA=l$~0r|2<%@GGZ-(W#%e?Do_FnU*{F~U(HxEvAoqBfb zp_crn@1K{RKL6FY@^@0B&`jA^evUV``0TyUd#0J!W9{xE5m}8cO6ETVFS)ELl{n3G zCCFA}&9k+-*KWBB=6_xxul$Gqr^2oLhyVZk>lbZFwCbAsMs&`{rCvAgNgLGHs@>64 zi(-3yTSocn0$tVz?`9wWt8CgKBC>vW=X8mx29;m@HmY)W-@lv?@$Ad_GjX#5_;%kk zaM{o`Khrs&(Ei459oJ@miH}8Z|05?e@7$n;Gf*Az^Up*6e1%(ZM`$2BVkNx*l5asi z%zoZlKj-$(yQQq{iKt0p<4e!0--HRpj=sMq*Q3K>NA5&cR@02`gC?3E zVtAN%-pkKeGUvv$#f4Jp_X1cMPMn=`b-A1U@$Mq|p8D4oG{agHZ>3|eIdoiq%WRX6(#ljK;pss-KYD02unBYoA+n`vNT1Dban2w zhl?-@(V4{Jw j>#1ix3KQ+uSalGN0No{PRQY#J^Z-V{`WBrQP$U2VU(AKI literal 0 HcmV?d00001 diff --git a/fuzz/corpus/fuzz_serialization/a5129c501ad4d923bab9f5a6bd2c5285c29a3b3b b/fuzz/corpus/fuzz_serialization/a5129c501ad4d923bab9f5a6bd2c5285c29a3b3b new file mode 100644 index 0000000000000000000000000000000000000000..6b4e602e66c76e170e3db483f28f748a1d8cd029 GIT binary patch literal 103 zcmb=O(=yGaZDwn!8PgT<8+?~rHZrTW{&wBh!1TEJVB*BfLS{Q^5lR>tAVBuFOZLMB kTrv>ek)23Nt_0ay&0Q-l_Rr3>*M-2eap literal 0 HcmV?d00001 diff --git a/fuzz/corpus/fuzz_serialization/a5e860ac13a20ab2f18783407f78bb905a0963eb b/fuzz/corpus/fuzz_serialization/a5e860ac13a20ab2f18783407f78bb905a0963eb new file mode 100644 index 0000000000000000000000000000000000000000..d0a3ba75b68f80219d59357c80a9132dd38e7e1c GIT binary patch literal 1461 zcmd<@HTY8fx|H>mR7Kv7e-~C1XgpSTd-CY~#A$JpwA0KV{Qtl9gY0DvF4LP#e!mZ= z9j*$MyzDl;cjY2;|JRFdGJSVZJhrD-+$vw~PDk^JH50B(u|NDNrc-k5TI($Z7wdnW z>%V-&;ra?IU(u9l-+9dL7ymi;M1I+Y_&?hZ&0c*xRS z(lohKPJUHRg${dzUbua`xHGwIqPO@f+h)02KeZ(M@0eZciSgueQHh`YC}@62UNlaR~^64@_FrX>y3XVZ7Sq^C3N%6e|@RDb0_2LJdKerj5;n)-BRcqC@ zanElBZ~x_MN=|54EO@K_s-NNg%oo!R274O(by^{D=+oH={6@#+mW|A+tt<@t8kin8A55HhS;%aM z_l>{BRvEfW)~NFDn&=UBGBH~Hz(TPZ*)wgYS{sOGRz*oYKahCve)s9VAHvcN`{w=G zzbsABB3+$(p_gde!$k{XR-b8=Zi?0TWczFybKZ`wwc=v`?EYp*e0cb;>Dm6^F9Cc% zy>?Dswds(hRqCRT#;=y{n00N#+?gE>QVBaw)KAT}x#M=mt5NQi`$?0>=?rt8`_BI9 z``&7*M5nb=n?SfOOXoBH*d-p5BW})=eSGnZbD`j78W{*QsZ>9%{*N`u=(8>GNNWD}N_73eA*#<>z=~i_hNs zyl0wuJ=X3%5|P#DqGbL<@RG}_Qi;<{SAuLeZP-2csqAl;?1u}ufT2xFApnVzAW3Eb D`kwuX literal 0 HcmV?d00001 diff --git a/fuzz/corpus/fuzz_serialization/a6fe820db6653fb5927c1a6bd8f51312efa25066 b/fuzz/corpus/fuzz_serialization/a6fe820db6653fb5927c1a6bd8f51312efa25066 new file mode 100644 index 0000000000000000000000000000000000000000..d005283d914badb06e88b9ad1853e881e7875862 GIT binary patch literal 152 zcmc~-t%yH(Cv7(O7DfgL*uTJJEBlq0rK;wa*X>xjXYmZT?kUInKi^2w-TjHzbxP~T zYlXMI{qVT#C%`2C>#gwR-7^K}EqzeoG<&W@{G7wlp(!VhhR-$r;CW*EL;2WP#{JLs v`(5DPGI#s;Px6kedr(a`QjfKr$KlbLaXu{fAG7k}TlFy;`$Wz(6q^A6!SzZj literal 0 HcmV?d00001 diff --git a/fuzz/corpus/fuzz_serialization/a86035f1a172b4fb88a7a69a7067fd47e2e27879 b/fuzz/corpus/fuzz_serialization/a86035f1a172b4fb88a7a69a7067fd47e2e27879 new file mode 100644 index 0000000000000000000000000000000000000000..91de8509ce4d42abf581e6fb10c771061c545ef1 GIT binary patch literal 102 zcmZqiR^-TB;J}!$!tmPxIfWJO9tsj-<*7Co?@F3G>=&$A+&J^Pq*d7y{Re8f$7`2A zx-b4^=f1Wz;{X4jaeg~#TdVZ@<4ONK86dzc>#CeX#VZFE8O!dg0uxt$d$+4V_1c%~ FR{`>ZFH-;j literal 0 HcmV?d00001 diff --git a/fuzz/corpus/fuzz_serialization/ac2592e04c8ccbd9fce8ee3e3b24936bacbea892 b/fuzz/corpus/fuzz_serialization/ac2592e04c8ccbd9fce8ee3e3b24936bacbea892 new file mode 100644 index 0000000000000000000000000000000000000000..f9abe6e3000539bbb272e3cd33b5c2157410303f GIT binary patch literal 2164 zcmd6oeKZpaAIE2n2h&Z&n6M?{y7PW9kGJQV#FTQqmNuh8?&unuiz)6J$t@IjLPtq^ z2^rDcM3dLNW>yP{ZFlBf)asg-d+u}k$EoL>=Z|}y^L+mM{(k5De&_f3=eO$@t9Pk$ zNs6=3UN&quzg{c*jDt|Oq+Ai}O@D~*|0*6JFHcCq;*jIU;v2bh;d7}uR*wxx= ze_fybKxOXb-y$~gHF<1ssCE4zM+fmClQc<@Gebv6hqIu^T%2{{|16;qR%SzW7# zcU|ou&Zvv0k?HGT=pG{{^jXvu^TDjTyNB*adRZc%RHfxK)#M2#uwBHu2ABR@w!_~k zd%LPHq`$=;yIKDKA#mI-vG|N&voqs7s`ebr7^U2c|4Dzwi&i(JDx(TWiPjaZN3*^& z8{3$gqn!)h!G zZs2TL@B4W!c)fZ#=grn9rotm$3?KOv7Dg!Aa7;qMu)h!FLe<l*Ahm%ekz7{UT>)QMrug_ES<=J(|raGUOL(N z_8)e=w~sHs6oUQf#sP0B8>Ab3X({-@w8jJzfuZqc>%q}mW`Zb9zDcbp{O~(Ql67jE zN~2fCc$dKLr~+R5UdAQYY?bTHh-YVZTRwudeT+vpuRQOOh#lievG-cn4`aHF5fGZ9 zQ5l=+Y2ljC5h~kCkg8S(>A2ll z`7(N@hlFLI1I&J0AhMUNHasn8KW(-~aSZZnI0`{2afiFlhA0${lRi8K@cQ8kZ+-n~ z8qd(=H5cFmZsuTw#+B5ipS6k}yv&`wq2%9%Ofpm~(;h0MD`cJCMYPbASmqL0v;m{6 z&?n@{OcQOP`MlD!!M1x1wU{L9%*tMaxdyN*If_^FyiAE{Mj1vQTE6 z`(``Cuc)I5ZN1|fX7Mr#EuI+9@2(hNrD`$q02dSH#EF-M%yxL+_*-n1p}S;_D*vvD9$_aFqty>A6q}Jf({`%0 zfp}(Bl+^PBi3jg@pYHo1EZwkg-k<%;(iAPy)wvgXiMBmlv>;~nnO5nhSdCA%&!#cw z?dUp>YJmwE7CbtsEUl6&R4-v}_i0th|DOA=PCu7FC}#Xt!I(w8^X5;_CePRv+t!}w zdL`h%KU*a1RGH5SGo5Ht1HsZ4QhZGM2i}|4z59JpjmfH`s^rjx<)0T_H{3Zp@AQ}S zq#Zh?Vp)IZ+WDFWGalMe=c~SDZ>6M92glZP^@q_?`FE)DKRqlMYwN%+QH{E4yc9wB|Xl2{!|*I}~xaPmx^rbw!-D`pzD0 z99e#M?)sw(_BOnqx9NC8Xu99I9bWUM1YMN7cR%>`-^CgW7b;x)r5jq}Q)3v#FMT+w za!po{$)=~vGcUwD28Nw;%)Mc){Lg(x)vSx$3#Oe~_sQ?i=MN13?3(LYrBv=Oneg0WMztGuB&cZyFohF?(@;ImjX|oTk111 zBqlJ}c^TLJ;g+)7!>5$>OF@bIZc<$9WR+tNyH59TbYC+{Qp@TU GCSd?tg(orq literal 0 HcmV?d00001 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 @@ +sM4V \ 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 0000000000000000000000000000000000000000..5a1e8837b55af8a4a0ba771bcf382dda615ff451 GIT binary patch literal 34 scmV+-0Nwu&jeF~L1?n1jZn*x?sP89mDB~waA>z-GmS#8L0PpFROfS|E!vFvP literal 0 HcmV?d00001 diff --git a/fuzz/corpus/fuzz_serialization/b95f6fb075e53d512a044a2360f433369b040e2a b/fuzz/corpus/fuzz_serialization/b95f6fb075e53d512a044a2360f433369b040e2a new file mode 100644 index 0000000000000000000000000000000000000000..4bcbaffada0303871d732e26bd801a78f992baae GIT binary patch literal 194 zcmb=O(=yGaZDwn!8Pk;@Mux-y234&rm+XfNxQ^_66Y;GfP)uT#_>GRsEsvWICQiI8 zWU<5h#@}MA4Be^L2I84jQBuzjsB)eb8y_pf(Y5Q^p7ZB!0syuoR$%}D literal 0 HcmV?d00001 diff --git a/fuzz/corpus/fuzz_serialization/ba89b5c3dcd4dfc793072a98906602abe615d3df b/fuzz/corpus/fuzz_serialization/ba89b5c3dcd4dfc793072a98906602abe615d3df new file mode 100644 index 0000000000000000000000000000000000000000..6b1506cb6f090fecf298902bf86bd2a70f79be73 GIT binary patch literal 528 zcmb=O(=tsP2a zH`0Z#s%?0j;QM7osX_H2&Ta0EcaGmM31G|>Tiw`c*TFeukM5~7LH*qdhkoRH@A-65 zZ^ywlud89ZXPiGI?(OhWa@`ox8EkRnM;IXymu0MK8G4hDq4> ztOo}I$UOqN=_{*lhxvEa@%t>F*B-at_-E24o! literal 0 HcmV?d00001 diff --git a/fuzz/corpus/fuzz_serialization/bbde76499882a6ff1e92ed9e5450b9d1b403250d b/fuzz/corpus/fuzz_serialization/bbde76499882a6ff1e92ed9e5450b9d1b403250d new file mode 100644 index 0000000000000000000000000000000000000000..0f2625ea050f15a7b08cfc4c7d5904433fd5356e GIT binary patch literal 9 QcmZR`&S$VWQ&W`-01cZ1MgRZ+ literal 0 HcmV?d00001 diff --git a/fuzz/corpus/fuzz_serialization/bcb4b1979366bc14e35ecceef03f26a476f91538 b/fuzz/corpus/fuzz_serialization/bcb4b1979366bc14e35ecceef03f26a476f91538 new file mode 100644 index 0000000000000000000000000000000000000000..c5936b4e66d8e33d38e9648b9c5c6fef5c42f9f3 GIT binary patch literal 68 zcmb=O(=yFvuKrK+GyJ&|_@>(TSVrFLpPid@v-ay6{^?~O#r*Tw>n1BV z7vGlMQgXGA-LvQ1=6*vf8ylJWn;Nfv&TqY+(RBR2f88yIjc=Xfs)F7}U0t!e!`J*< zX2(f~jtaA9bCuNN&&!twxJ7SS!#*o-@~Zh!mr4rX)tMhto_=yW$6<}?3)Am>eUTUH z_RastzvCSFpPJ@(v4pF9@-TlNCVf3XTV$o1q1?Bh{}SCeUoT*?`#h&K^vk1Z&Id2e z_@|y<^VBE*$?F@IQ5S#5)x93Ro?fZLjJvtnAN*2gQuvDj2h< zci#Nw+2k3!V%ypiU9SW@`DcrSohtJ=VWtypY9LtpLW++`|G<0mx_7@Xsxeu0RFxdM zu>A9)>xMgL=biqNp0q=!R4nW7TsvRW;6pp=eATz?t(5fX;MjVu{_we`#3z;QYgZe{ z_IMvulsWg;$IZ?mU)=4<)*{}iT~`cPWLJkhxP9c}%MBZg?p;0af8T$>ZLzgeczUi| z$*u6{P`amgnpr?a_PSr&b*;|}zw@4&`oW2H(%}l389MQAW%sO%);#Am;bwq!hhkU6 zS*!2t(Z-SGcjvA@x?pd^`+1v=H-x79o!j9xZ%WWbxqJ76U;kaKv2dZnwO_iSB|bHV zQT)<}qbk>A1(|Gmx;*njyklV4Img@^*2@3fXH?C)$h~0Nsdbgl5 z{Uwt=imVKoXFB~wW4ge)Pd3c#`)ULOKiXN$SuG{`^6W2@>!#`ptc?{|TF z%Unm+J^L4!Y-PU^vsBgm^12->jnrc^6R&Oj_=$f?-lCoR>Lxm8M-(4dzUdLs5Sp+v qbux2YXvpcvwf{{MH*7V}6xb4PJCDPoGvj<%?muSb#Uf`Kip>D)sZrek literal 0 HcmV?d00001 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 @@ +0OL \ 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 0000000000000000000000000000000000000000..3eb3851750c69a67c036f8051521810ab071d962 GIT binary patch literal 850 zcmb=O(=yGaZDwn!8PgSQ3c#Ev!V4}*e0cb;>Dm6^F98gbziKi}NMwKlAqf2+0{$_m z{@d?%YvGM_;j3yJ9w+#ISy5_OeTZ|Ld*hwsH%tN;bH!FScG`7tPT8Y-Dos#-x5A+x z`QCdzUDVrgu+8gg*zOtU4~cs_{GOAs)p%87(zcTe*2rysvUcN3&#T{-H#t9B_4fbw z?5+;wM*R|_@QCHkD}R65fBK7ykD`^RgaAtyKpK%0s1Y84 zplG(Xw&pmUTPgd}ea5B>T;JMml$RJT-XGBJr1`Z^gZdRg)W7lo=d=5n6WD$;)EIu5M}kwuQewVX?f Tz+Ugm_FLETw`F%2C_=*lh}es` literal 0 HcmV?d00001 diff --git a/fuzz/corpus/fuzz_serialization/c68eef36f0848d2dc34d212d294f37ce490d3258 b/fuzz/corpus/fuzz_serialization/c68eef36f0848d2dc34d212d294f37ce490d3258 new file mode 100644 index 0000000000000000000000000000000000000000..899303e3d0394ad10bb392650a06cb1edfe8da5a GIT binary patch literal 286 zcmZqiR^-TB;J}!$!jSuboWcrs4+ROa@>H9PcO}go_6yc5Zk%~t(yHuOOoyFe&bE4! zy=U~l96xpKnd2l;&$Nmcl^iylkN&=8ta}=ETKIRBp-Hh=kdE5Co+!Qp%dN#6d3>%< z=}Kgp84<#LMC}^`c_8(y_*B<(q1#ecgj%%cE4nAYH{-V0qFD5v->0jN-)H%}_PF(i zKa(~Ua=sF}`KJCxakyFQYfo|RTaTg?p6EYN%ROGZ{Ly{!FFW_Otr7qK|BUn7N!wbb n-ycu<=LvO?S=LoKhl*DYEHakeR|O`n{Pu2Ff$Fs{*RKKqA)aYY literal 0 HcmV?d00001 diff --git a/fuzz/corpus/fuzz_serialization/c69ca63f0353737b22874f88f5a67dafc1bf7d44 b/fuzz/corpus/fuzz_serialization/c69ca63f0353737b22874f88f5a67dafc1bf7d44 new file mode 100644 index 0000000000000000000000000000000000000000..11e6dc1e26a726d0c3781e1ab211f222dafc865f GIT binary patch literal 1093 zcmb=O(=yGaZDwn!8Pk;@+f5sG&wVQU+a>$qw<8f;ZyI(k2o#f8C4Qsha?3_$)z;sx z`x=-YHy=!#cv;A7hxd)Y#a0=*OV+6J@0#clb}}(q{lG%88QC*!r&=3`GcqtRWL8B< zJwK3m@P7B{z8}KU4g2Q(*}p7J(IQ=)d!d(T+rvc*VpgANm2QgF_+G z41?GIz#o<67gtYec8Aj1WP!eHzjZBtTXu(quXc}pTzAX6b7{*e&ID-W;)+;AtksyT z-6j~989wKU@PbPcA0GZ|dbU6KO8~>X);Vmg!xX04aUMx|0fDC;8$hkE4!|; zs50ZOy3NZnWp4H#ZmbQ_?-wq5Q}gv_G}b`9iU0({pS)Nof;(6h#xj917=FW8Xf%#! gg{jik#vX+b-%noE08K__gnW$f`&FRX2p$p}08c3dEC2ui literal 0 HcmV?d00001 diff --git a/fuzz/corpus/fuzz_serialization/ce6b603fce80719da46c97eb1b95bbd0ad777070 b/fuzz/corpus/fuzz_serialization/ce6b603fce80719da46c97eb1b95bbd0ad777070 new file mode 100644 index 0000000000000000000000000000000000000000..4855be1ac4f224d4c6d0bad00fc95e782cbc79a4 GIT binary patch literal 357 zcmd<@HTY6p!TPH7wN&1Ye-~C1XgpSTd-CY~#A$Jpv~Q#ft8KXYIKlVJ3TB2vj!o5y#p&Ez?})>i;yy zZO;Gy|9>WJD%1qh|LqSH|F6Bu&#A`stDttP$>B3KZ>a|Ma&j*`HT~_RZLQMpk0)7M S|MSecD(7Hbv6SO|Nno+G~)+rKgeF@;4;0b3jjTyA~XO1 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..0d713ad38d8424a1aeaecd968c0cdb7796061b5d GIT binary patch literal 1060 zcmc~-t%yH(CvA4Sz{BIK84HgsN?G~cEQ|lX|GScu<9Vrz6YUEpc`?S`vpv+ZBc@Qj zx#8=MxxbR^e!I#UtUT)4T_fwR9GM=NSN_sqR*zwP0QPY)D1lfK_)jIDp#>v+mF{Uz6S z^ElIewpVQLtX6sb^5@4(!p-)&9z3V~O|HJ!9sFmdPLk!R(7e8hUpG~~o5#WU>3pDf zm&Utff1$XPbJ<^0j!cgJuzFg6%t_VPf9Gwz7TfZH|L^+TvlI7q)G>5h%eK?&8}m z>^B>iQR-;kQ&T@Uu}(T%Au~fK{;lkumC>5#ye8ZXuuyyi^_x+r(=e(>wRi!~|^Y2GkO(H zecx_iDY!RNZQK7B$EX%7@DR-)Eksdb?mq7G M8~a4gG!&Zw07n2uumAu6 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..3adb67d26b4f19eb27d472ca8603fe279e47cde8 GIT binary patch literal 77 zcmb=O)53Hm$ad3)-E*JH{&vZJxIppPp58y_p2)wczf)`;-YWk8|C#+Dz~5`|rTRYv cC^v|&VGxL{wqnp@V5ptbBD^5&?j?zR0LT|AaR2}S literal 0 HcmV?d00001 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;5o \ 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 0000000000000000000000000000000000000000..e48e6a16f264baeb2634e33873b790d62a27f9ab GIT binary patch literal 27 jcmb=O)53Hm$hJXz4TC^rwH1RN14E1Og0#DrB=!LSgft1X literal 0 HcmV?d00001 diff --git a/fuzz/corpus/fuzz_serialization/dbee5c3fa40e7883ee26d33234ed6364cb7b3da6 b/fuzz/corpus/fuzz_serialization/dbee5c3fa40e7883ee26d33234ed6364cb7b3da6 new file mode 100644 index 0000000000000000000000000000000000000000..9a8a489b02c4013cbda7ffa6dcba5f7eb4972ce7 GIT binary patch literal 437 zcmb=O(=yGaZDwn!8Pk;@-Ax;I&wVQU+a>$q0@BeQr{7)D#=e_Pa?{}E7y2fPfHo>^e@HtO} z7hIC~@bF*Lv;Dze=8_C>`|05QZo=+?t6XyHhm>hm`n%pUMAkYU9n4tat|NlRe fHWg|D>HqczivQPM<>yp8>+!{HtI6RrHC4F)Ie06g literal 0 HcmV?d00001 diff --git a/fuzz/corpus/fuzz_serialization/ddb98f7964ea51bb468c9fa93af5f11bfc072627 b/fuzz/corpus/fuzz_serialization/ddb98f7964ea51bb468c9fa93af5f11bfc072627 new file mode 100644 index 0000000000000000000000000000000000000000..abdfd798424570667b120acd67fc3943b729beba GIT binary patch literal 528 zcmb=O(=tsP2a zH`0Z#s%?0j;QM7osX_H2&Ta0EcaGmM31G|>Tiw`c*TFeukM5~7LH*qdhkoRH@A-65 zZ^ywlud89ZXPiGI?(OhWa@`ox8EkRnM;IXymu0MK8G4hDq4> ztOo}I$UOqN=_{*lhxvEa@%t>F*B-at_-E24$q0*8yKU93+_7uT4q-6j~9 z89wKU@PbPcA0GZ|dbU6KO8~>OE_cS6UYTe=?adWrtNr#LbzqkD2lhOPZ~E8~?oT>I`0M zwi~UywO9H7uPy$5Yj$$_@!5P2`E69??!JFHA>!GW^Jn5_1@P^@Y2dQKt*1BWPS^ZQ z=YT@{8@qK}oBbs|76mO=4f)vew|v%_nyTFMHQS2RZpf?t+wXR3;f-|Rt7;n_C-{C@ zQEFIyh;y5J)efPu6lMwM!T_UrxDrZ>PB3}CnPW&5pb`P;HP3=}Bg0E@QH A>;M1& literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..cd1a4b19dee8bde15b6b153fe2fb5a56b6ee974a GIT binary patch literal 168 zcmd-t-pI{>2?Qdmt$?C-UdDBQxTWm&@F`{eQh+M+$t)AT&QQ_5;j!1#bG{EXga0Ln zU3+#TJo>Cv)qyz=HhSIIeg9Ga>#+F8f!UwqBC;|?GuKr&t=%AZ&n+1l p5);r2SK_{#6xTXg<=Dfn(>)yB7fnoqon$q0HsJsO literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..66f59bcc7fdbcbe80867527d39b5827802d9e511 GIT binary patch literal 830 zcmb=O(=yGaZDwn!8PgT<8y%NhHZrTW{&wBh@Pg@a^TEW4mxauBc;EP2Y?YzAWX*pF zn39rtxnBCh%vsgd3Uy^Gc6hGdvnF|^WwAo#dA;wP?_XxxDWsL>YImoZ*539pniH{H zWX-d+y4P;G3+8`bA+P-N&qMxvgFoWqOmz@Au)f!&RY@ zm))lKu3Tj9|9a6)rtdC_$M*EbbV{yWYrUo5V*Rgk{g;n8Twh`3E1ELxJCE7@;y>q} z$d{=kU;MUnqPMv1`S!&idPOSGM3#}1tzZi_HI{!>NTxomI}rAleK@RF|Z!rzh6FX(%sCw z3%2HQ@xNZH?30c2HdvPa0vaM3>xcQPWS!5udY$4tqK VkJA}87`*FPy}Pwg@bLPHVgUF6_?`d& literal 0 HcmV?d00001 diff --git a/fuzz/corpus/fuzz_serialization/f82023faffb3b3e67d5d587caa6b53ab10f27fb6 b/fuzz/corpus/fuzz_serialization/f82023faffb3b3e67d5d587caa6b53ab10f27fb6 new file mode 100644 index 0000000000000000000000000000000000000000..ef957661ed25805f0bf900b4fd94816ca2bd63cb GIT binary patch literal 19 bcmb=O(=yFvuKv%X7TNg>Cp&kuRpkNzUb_hn literal 0 HcmV?d00001 diff --git a/fuzz/corpus/fuzz_serialization/fa30ba2c9565dcccb091ade5dbab902e0cf0c3b4 b/fuzz/corpus/fuzz_serialization/fa30ba2c9565dcccb091ade5dbab902e0cf0c3b4 new file mode 100644 index 0000000000000000000000000000000000000000..5a9a0ba702b027e92cff696f307d2b87b3f07891 GIT binary patch literal 720 zcmb=`MhE{PfEOap00l5r>M(}(oF~EyE=hb~V0`HDuj$$T;4c9T42&@45L)%$ez#i- zZ=?%fRon15!S~Mb8zupaxnipuJMB6+r|i)^mDc8UHEj2c^M}N}9e&Tr*lN70F=^Y$ z1#9FsKUur+rRUXe%bT2^tvYTX2e(yQ+X#tGkO}n+3Dn7FPb|cf3zi=@MYfcnMQ92% zVSM6kZgbVMD>@qaZE4X9uC-wj_C4$Mb{s^6&;DQF@L^!6Kn-IC5oPZz7e1iiCJ?dA z#jhGY?bL-V=a$goq+f;M(G1MW7#5)K>r9FlSlEBK}pZ43z9iC=#{ z6TQMDGv&mSE4?ONoHfM?&#jjwPjFGFT4OHfDXk*ycdp~miV#^{@foahk?i~r3gy0R PzjZBtTXu(mf-M{X=4pNL literal 0 HcmV?d00001 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 @@ +}DaP04 \ 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 0000000000000000000000000000000000000000..41850354d97ddddf730f41a7ee5069438325c5fa GIT binary patch literal 126 zcmd<@HTY6p!TPH7wN&1Ye-~C1XgpSTd-CY~L`DV(m=-rl`$oF3+J>u-6MVm{_zwie zs~VHGom>D_P_X>Cshl<(v`6s +#include +#include +#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::vectord; + char kbuf[32]; + u_int32_t buffer_len; + + /* To allow memory allocation failures */ + fuzz_set_alloc_callbacks_and_seed(size); + + fmt = static_cast(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()); + ndpi_serialize_uint32_int32(&serializer, i, fuzzed_data.ConsumeIntegral()); + ndpi_serialize_uint32_uint64(&serializer, i, fuzzed_data.ConsumeIntegral()); + ndpi_serialize_uint32_int64(&serializer, i, fuzzed_data.ConsumeIntegral()); + ndpi_serialize_uint32_float(&serializer, i, fuzzed_data.ConsumeFloatingPoint(), "%f"); + if (fmt != ndpi_serialization_format_tlv) + ndpi_serialize_uint32_double(&serializer, i, fuzzed_data.ConsumeFloatingPoint(), "%lf"); + d = fuzzed_data.ConsumeBytes(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()); + + ndpi_serialize_string_uint32(&serializer, kbuf, fuzzed_data.ConsumeIntegral()); + ndpi_serialize_string_int32(&serializer, kbuf, fuzzed_data.ConsumeIntegral()); + ndpi_serialize_string_uint64(&serializer, kbuf, fuzzed_data.ConsumeIntegral()); + ndpi_serialize_string_int64(&serializer, kbuf, fuzzed_data.ConsumeIntegral()); + ndpi_serialize_string_float(&serializer, kbuf, fuzzed_data.ConsumeFloatingPoint(), "%f"); + if (fmt != ndpi_serialization_format_tlv) + ndpi_serialize_string_double(&serializer, kbuf, fuzzed_data.ConsumeFloatingPoint(), "%lf"); + ndpi_serialize_string_string(&serializer, kbuf, fuzzed_data.ConsumeBytesAsString(8).c_str()); + ndpi_serialize_string_boolean(&serializer, kbuf, fuzzed_data.ConsumeIntegral()); + + ndpi_serialize_binary_uint32(&serializer, kbuf, sizeof(kbuf), fuzzed_data.ConsumeIntegral()); + ndpi_serialize_binary_int32(&serializer, kbuf, sizeof(kbuf), fuzzed_data.ConsumeIntegral()); + ndpi_serialize_binary_uint64(&serializer, kbuf, sizeof(kbuf), fuzzed_data.ConsumeIntegral()); + ndpi_serialize_binary_int64(&serializer, kbuf, sizeof(kbuf), fuzzed_data.ConsumeIntegral()); + ndpi_serialize_binary_float(&serializer, kbuf, sizeof(kbuf), fuzzed_data.ConsumeFloatingPoint(), "%f"); + if (fmt != ndpi_serialization_format_tlv) + ndpi_serialize_binary_double(&serializer, kbuf, sizeof(kbuf), fuzzed_data.ConsumeFloatingPoint(), "%lf"); + ndpi_serialize_binary_boolean(&serializer, kbuf, sizeof(kbuf), fuzzed_data.ConsumeIntegral()); + d = fuzzed_data.ConsumeBytes(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()); + ndpi_serialize_string_string(&serializer, kbuf, fuzzed_data.ConsumeBytesAsString(8).c_str()); + ndpi_serialize_string_float(&serializer, kbuf, fuzzed_data.ConsumeFloatingPoint(), "%f"); + ndpi_serialize_binary_boolean(&serializer, kbuf, sizeof(kbuf), fuzzed_data.ConsumeIntegral()); + 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()); + ndpi_serialize_string_string(&serializer, kbuf, fuzzed_data.ConsumeBytesAsString(8).c_str()); + ndpi_serialize_string_float(&serializer, kbuf, fuzzed_data.ConsumeFloatingPoint(), "%f"); + ndpi_serialize_binary_boolean(&serializer, kbuf, sizeof(kbuf), fuzzed_data.ConsumeIntegral()); + 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()); + ndpi_serialize_string_string(&serializer, kbuf, fuzzed_data.ConsumeBytesAsString(8).c_str()); + ndpi_serialize_string_float(&serializer, kbuf, fuzzed_data.ConsumeFloatingPoint(), "%f"); + ndpi_serialize_binary_boolean(&serializer, kbuf, sizeof(kbuf), fuzzed_data.ConsumeIntegral()); + } + + 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 @@ -1248,6 +1248,16 @@ extern "C" { */ int ndpi_serialize_uint32_float(ndpi_serializer *serializer, u_int32_t key, float 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 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 @@ -1276,6 +1286,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 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);