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: 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`) --- tests/unit/unit.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'tests/unit') 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); -- cgit v1.2.3