aboutsummaryrefslogtreecommitdiff
path: root/src/lib/ndpi_main.c
diff options
context:
space:
mode:
authorLuca Deri <deri@ntop.org>2020-10-15 21:52:31 +0200
committerLuca Deri <deri@ntop.org>2020-10-15 21:57:59 +0200
commite9721eb4ceecac2379d3c6f5c6abdd4d4a27628c (patch)
tree555b6d6e3a9f97938ad90cbb217114d8b6ccf081 /src/lib/ndpi_main.c
parent88f3519ab3979fa632df99d7a62e7ffcd2c73c88 (diff)
Improved processing of IPv6 header
Improved QUIC serialization
Diffstat (limited to 'src/lib/ndpi_main.c')
-rw-r--r--src/lib/ndpi_main.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c
index 67636a1fc..4cbe722c2 100644
--- a/src/lib/ndpi_main.c
+++ b/src/lib/ndpi_main.c
@@ -3446,21 +3446,25 @@ int ndpi_handle_ipv6_extension_headers(struct ndpi_detection_module_struct *ndpi
if(*nxt_hdr == 59) {
return(1);
}
+
// fragment extension header has fixed size of 8 bytes and the first byte is the next header type
if(*nxt_hdr == 44) {
if(*l4len < 8) {
return(1);
}
+
*nxt_hdr = (*l4ptr)[0];
*l4len -= 8;
(*l4ptr) += 8;
continue;
}
+
// the other extension headers have one byte for the next header type
// and one byte for the extension header length in 8 byte steps minus the first 8 bytes
if(*l4len < 2) {
return(1);
}
+
ehdr_len = (*l4ptr)[1];
ehdr_len *= 8;
ehdr_len += 8;
@@ -3468,10 +3472,16 @@ int ndpi_handle_ipv6_extension_headers(struct ndpi_detection_module_struct *ndpi
if(*l4len < ehdr_len) {
return(1);
}
+
*nxt_hdr = (*l4ptr)[0];
+
+ if(*l4len < ehdr_len)
+ return(1);
+
*l4len -= ehdr_len;
(*l4ptr) += ehdr_len;
}
+
return(0);
}
#endif /* NDPI_DETECTION_SUPPORT_IPV6 */