diff options
author | Michael Tüxen <tuexen@fh-muenster.de> | 2005-03-30 16:16:07 +0000 |
---|---|---|
committer | Michael Tüxen <tuexen@fh-muenster.de> | 2005-03-30 16:16:07 +0000 |
commit | 1de67556eacb5b52a3efcc4ae9eef3cca100a693 (patch) | |
tree | 255d05627df1650f70556b1bf84481f75946440b /epan | |
parent | b183d4d1e33dd99303d23faca695c94ae4a651fb (diff) |
Fix the handling of the length parameter in the DATA chunk.
This is a quick fix. A systematic follows...
svn path=/trunk/; revision=13978
Diffstat (limited to 'epan')
-rw-r--r-- | epan/dissectors/packet-sctp.c | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/epan/dissectors/packet-sctp.c b/epan/dissectors/packet-sctp.c index b5153f639a..e66eff440a 100644 --- a/epan/dissectors/packet-sctp.c +++ b/epan/dissectors/packet-sctp.c @@ -1360,7 +1360,7 @@ dissect_data_chunk(tvbuff_t *chunk_tvb, guint16 chunk_length, packet_info *pinfo proto_tree *flags_tree; guint8 e_bit, b_bit, u_bit; - if (chunk_length < DATA_CHUNK_HEADER_LENGTH - CHUNK_HEADER_LENGTH) { + if (chunk_length <= DATA_CHUNK_HEADER_LENGTH - CHUNK_HEADER_LENGTH) { proto_item_append_text(chunk_item, ", bogus chunk length %u < %u)", chunk_length + CHUNK_HEADER_LENGTH, DATA_CHUNK_HEADER_LENGTH); @@ -1405,17 +1405,15 @@ dissect_data_chunk(tvbuff_t *chunk_tvb, guint16 chunk_length, packet_info *pinfo proto_item_append_text(chunk_item, "middle"); } - proto_item_append_text(chunk_item, " segment, TSN: %u, SID: %u, SSN: %u, PPID: %u", + proto_item_append_text(chunk_item, " segment, TSN: %u, SID: %u, SSN: %u, PPID: %u, payload length: %u byte%s)", tvb_get_ntohl(chunk_tvb, DATA_CHUNK_TSN_OFFSET), tvb_get_ntohs(chunk_tvb, DATA_CHUNK_STREAM_ID_OFFSET), tvb_get_ntohs(chunk_tvb, DATA_CHUNK_STREAM_SEQ_NUMBER_OFFSET), - payload_proto_id); + payload_proto_id, + chunk_length - DATA_CHUNK_HEADER_LENGTH + CHUNK_HEADER_LENGTH, plurality(chunk_length - DATA_CHUNK_HEADER_LENGTH + CHUNK_HEADER_LENGTH, "", "s")); } - if (chunk_tree) { - proto_item_append_text(chunk_item, ", payload length: %u byte%s)", - chunk_length, plurality(chunk_length, "", "s")); - } - payload_tvb = tvb_new_subset(chunk_tvb, DATA_CHUNK_PAYLOAD_OFFSET, chunk_length, chunk_length); + + payload_tvb = tvb_new_subset(chunk_tvb, DATA_CHUNK_PAYLOAD_OFFSET, chunk_length - DATA_CHUNK_HEADER_LENGTH + CHUNK_HEADER_LENGTH, chunk_length - DATA_CHUNK_HEADER_LENGTH + CHUNK_HEADER_LENGTH); return dissect_payload(payload_tvb, pinfo, tree, payload_proto_id); } |