diff options
author | Jaap Keuter <jaap.keuter@xs4all.nl> | 2009-11-25 06:39:29 +0000 |
---|---|---|
committer | Jaap Keuter <jaap.keuter@xs4all.nl> | 2009-11-25 06:39:29 +0000 |
commit | ea3407dc598c13c4d9637ba9d1d9ebcee2257985 (patch) | |
tree | 30c3e0efc420e7d58ac19c686759a8af16ba3765 /epan/dissectors/packet-edonkey.c | |
parent | eadf5e8448c4e9426758c02a49103d70efdc96b7 (diff) |
From Andrew Jean:
When dissecting an eDonkey "Request Parts" message, Wireshark incorrectly reads
3 offset start/end pairs when the actual number can be 1-3 pairs.
svn path=/trunk/; revision=31071
Diffstat (limited to 'epan/dissectors/packet-edonkey.c')
-rw-r--r-- | epan/dissectors/packet-edonkey.c | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/epan/dissectors/packet-edonkey.c b/epan/dissectors/packet-edonkey.c index 87aa2ef7b7..8b79983927 100644 --- a/epan/dissectors/packet-edonkey.c +++ b/epan/dissectors/packet-edonkey.c @@ -1881,13 +1881,20 @@ static void dissect_edonkey_tcp_message(guint8 msg_type, break; case EDONKEY_MSG_REQUEST_PARTS: /* Request Parts: <File hash> <Start offset>(3) <End offset>(3) */ - offset = dissect_edonkey_file_hash(tvb, pinfo, offset, tree); - offset = dissect_edonkey_start_offset(tvb, pinfo, offset, tree); - offset = dissect_edonkey_start_offset(tvb, pinfo, offset, tree); - offset = dissect_edonkey_start_offset(tvb, pinfo, offset, tree); - offset = dissect_edonkey_end_offset(tvb, pinfo, offset, tree); - offset = dissect_edonkey_end_offset(tvb, pinfo, offset, tree); - offset = dissect_edonkey_end_offset(tvb, pinfo, offset, tree); + { + int pairs, count; + offset = dissect_edonkey_file_hash(tvb, pinfo, offset, tree); + pairs = (msg_end - offset) / 8; + + for (count=0; count < pairs; count++) + { + offset = dissect_edonkey_start_offset(tvb, pinfo, offset, tree); + } + for (count=0; count < pairs; count++) + { + offset = dissect_edonkey_end_offset(tvb, pinfo, offset, tree); + } + } break; case EDONKEY_MSG_SENDING_PART: /* Sending Part: <File hash> <Start offset> <End offset> DATA */ |