diff options
Diffstat (limited to 'src/packet/packet.cpp')
| -rw-r--r-- | src/packet/packet.cpp | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/src/packet/packet.cpp b/src/packet/packet.cpp index ccadc9b..5954e7e 100644 --- a/src/packet/packet.cpp +++ b/src/packet/packet.cpp @@ -728,7 +728,21 @@ static inline uint16_t get_l2tpv2_hdr_len(const char *data, uint16_t len) { return 0; } - return ntohs(*((uint16_t *)(data + skip_len))); + uint16_t offset = ntohs(*((uint16_t *)(data + skip_len))); + if (offset == 0) + { + return skip_len + 2; + } + + // invalid offset + if (offset > len) + { + return 0; + } + else + { + return offset; + } } else { |
