Skip to content

Commit 8f668a2

Browse files
committed
Handle case of invalid fragments
1 parent dfc79bc commit 8f668a2

File tree

1 file changed

+4
-2
lines changed

1 file changed

+4
-2
lines changed

ipparse/l3/fragmented_ip4.moon

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ collect: =>
1313
total_len = off + frag_off + data_off + data_len
1414
-- 64KB is the theoretical maximum, 10KB a reasonable max len default
1515
max_len = total_len > 10240 and 65535 or 10240
16-
return nil, "Invalid size" if max_len > 65535
16+
return false, "Invalid size" if max_len > 65535
1717
skb = fragments.skb
1818
if skb
1919
if #skb < max_len -- Handle the case of a very big jumbo frame
@@ -27,7 +27,9 @@ collect: =>
2727
skb\setbyte i, _skb\getbyte(i) for i = 0, off + data_off + data_len - 1
2828
else
2929
offset = off + data_off
30-
skb\setbyte (frag_off + i), _skb\getbyte(i) for i = offset, offset + data_len - 1
30+
max_offset = offset + data_len - 1
31+
return false, "Invalid data offset" if max_offset > #_skb
32+
skb\setbyte (frag_off + i), _skb\getbyte(i) for i = offset, max_offset
3133
fragments[#fragments+1] = {:frag_off, :off, :data_off, :data_len, :mf}
3234
sort fragments, (a, b) -> a.frag_off < b.frag_off
3335
lastfrag = fragments[#fragments]

0 commit comments

Comments
 (0)