-
Notifications
You must be signed in to change notification settings - Fork 32
Closed
Description
Hi @raydac ,
First of all, thanks for such a brilliant parser, it is very helpful! I am using it to parse TCP packets in Spark streaming.
Currently, i notice JBBP throws parsing exception occasionally when running in multithread, while the same program works well in single thread. And if i copy the failed packet to unit test, it also passes. Would you mind taking a look?
My IP/TCP structure definition is:
"skip:14; // skip bytes till the frame\n"
+"bit:4 InternetHeaderLength;"
+"bit:4 Version;"
+"bit:2 ECN;"
+"bit:6 DSCP;"
+"ushort TotalPacketLength;"
+"ushort Identification;"
+"bit:8 IPFlagsAndFragmentOffset_low;"
+"bit:5 IPFlagsAndFragmentOffset_high;"
+"bit:1 MoreFragment;"
+"bit:1 DonotFragment;"
+"bit:1 ReservedBit;"
+"ubyte TTL;"
+"ubyte Protocol;"
+"ushort HeaderChecksum;"
+"int SourceAddress;"
+"int DestinationAddress;"
+"byte [(InternetHeaderLength-5)*4] Options;"
"skip:34; // skip bytes till the frame\n"
+ "ushort SourcePort;"
+ "ushort DestinationPort;"
+ "int SequenceNumber;"
+ "int AcknowledgementNumber;"
+ "bit:1 NONCE;"
+ "bit:3 RESERVED;"
+ "bit:4 HLEN;"
+ "bit:1 FIN;"
+ "bit:1 SYN;"
+ "bit:1 RST;"
+ "bit:1 PSH;"
+ "bit:1 ACK;"
+ "bit:1 URG;"
+ "bit:1 ECNECHO;"
+ "bit:1 CWR;"
+ "ushort WindowSize;"
+ "ushort TCPCheckSum;"
+ "ushort UrgentPointer;"
+ "byte [HLEN*4-20] Option;"
+ "byte [_] Data;"
And the exception i got is:
com.igormaznitsa.jbbp.exceptions.JBBPParsingException: Detected negative calculated array length for field 'options' [-80 (0xFFFFFFB0)]
at com.igormaznitsa.jbbp.JBBPParser.assertArrayLength(JBBPParser.java:101)
at com.igormaznitsa.jbbp.JBBPParser.parseStruct(JBBPParser.java:176)
at com.igormaznitsa.jbbp.JBBPParser.parse(JBBPParser.java:489)
at com.igormaznitsa.jbbp.JBBPParser.parse(JBBPParser.java:515)
and
JBBPParsingException while parsing, Detected negative calculated array length for field 'option' [-68 (0xFFFFFFBC)]
Thanks in advance!
jobpav1984