diff options
author | Luca <deri@ntop.org> | 2023-10-11 17:14:17 +0200 |
---|---|---|
committer | Luca <deri@ntop.org> | 2023-10-11 17:14:17 +0200 |
commit | 30fc89e556e5c09bf62b9548862cc3d924b9ec81 (patch) | |
tree | 5c5bc8760d922f18a5b8a209bcd3c40c88820d8a | |
parent | 304747f1fac02038c64dca004a80768db43eeb65 (diff) |
Fix for buffer overflow in serialization
-rw-r--r-- | src/lib/ndpi_serializer.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/src/lib/ndpi_serializer.c b/src/lib/ndpi_serializer.c index 9a27add4d..e8cdf5c88 100644 --- a/src/lib/ndpi_serializer.c +++ b/src/lib/ndpi_serializer.c @@ -1496,14 +1496,12 @@ int ndpi_serialize_string_int32(ndpi_serializer *_serializer, if(serializer->fmt == ndpi_serialization_format_csv) { /* Key is ignored */ u_int32_t buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; - u_int16_t needed = 11 /* 10 (billion) + CVS separator */; + u_int16_t needed = 12 /* 10 (billion) + CVS separator + \0 */; int rc; if(buff_diff < needed) { if(ndpi_extend_serializer_buffer(&serializer->buffer, needed - buff_diff) < 0) - return(-1); - else - buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; + return(-1); } if(!(serializer->status.flags & NDPI_SERIALIZER_STATUS_HDR_DONE)) { @@ -1512,14 +1510,16 @@ int ndpi_serialize_string_int32(ndpi_serializer *_serializer, } ndpi_serialize_csv_pre(serializer); - /* needed--; */ + buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; rc = ndpi_snprintf((char*)&serializer->buffer.data[serializer->status.buffer.size_used], - needed, "%u", value); + buff_diff, "%u", value); if(rc < 0 || (u_int)rc >= buff_diff) return(-1); + serializer->status.buffer.size_used += rc; + return(0); } else #endif |