Wireshark mailing list archives
Re: Iteration in dissectors?
From: Tyson Key <tyson.key () gmail com>
Date: Sun, 22 Jan 2012 21:41:31 +0000
Thanks Chris,
If I remember correctly, apart from an annoying, misleading "malformed
packet" error, I eventually managed to dump all of the block IDs (1-4)
using either :
/* Start counting from 13 */
for (rwe_pos = 13; rwe_pos < tvb_get_guint8(tvb, 13); rwe_pos+=2) {
proto_tree_add_item(felica_tree, hf_felica_block_nbr, tvb,
rwe_pos+1, 1, ENC_BIG_ENDIAN);
}
or
/* Start counting from 13 */
for (rwe_pos = 13; rwe_pos < tvb_get_guint8(tvb, 12); rwe_pos+=2) {
proto_tree_add_item(felica_tree, hf_felica_block_nbr, tvb,
rwe_pos+1, 1, ENC_BIG_ENDIAN);
}
I've found that removing the extraneous "+1" from that code will cause
all of the IDs to be "128" (which is incorrect) - so it's probably
just a case of trying to break the loop at the right time.
For what it's worth, this also seems to work (with caveats):
/* Start counting from 13 */
for (rwe_pos = 13; tvb_get_guint8(tvb, 12) < rwe_pos; rwe_pos+=2) {
printf (rwe_pos);
proto_tree_add_item(felica_tree, hf_felica_block_nbr,
tvb, rwe_pos+1, 1, ENC_BIG_ENDIAN);
}
In that case, I see the following error messages on stdout:
21:01:04 Warn Dissector bug, protocol FeliCa, in packet 5:
More than 1000000 items in the tree -- possible infinite loop
21:01:04 Warn Dissector bug, protocol FeliCa, in packet 8:
More than 1000000 items in the tree -- possible infinite loop
After trying your initial examples, and doing some of my own
experimentation, I've came to the conclusion that I can either
"successfully fail" and obtain all of the block IDs along with an
error message; or "fail successfully" and obtain nothing - since the
conditions being tested are contradictory (e.g. the number of blocks
is less than the position - therefore, we don't move the cursor).
Tyson.
On 22 January 2012 18:16, Chris Maynard <Chris.Maynard () gtech com> wrote:
Tyson Key <tyson.key@...> writes:My (partially working) iteration code looks like: /* Start counting from 13 */ for (rwe_pos = 13; rwe_pos < tvb_get_guint8(tvb, 13); rwe_pos++) { proto_tree_add_item(felica_tree, hf_felica_block_nbr, tvb, rwe_pos + 1, 1, ENC_BIG_ENDIAN); }How about something like this: /* Start counting from 14 */ for (rwe_pos = 14; rwe_pos < tvb_get_guint8(tvb, 12); rwe_pos+=2) { proto_tree_add_item(felica_tree, hf_felica_block_nbr, tvb, rwe_pos, 1, ENC_BIG_ENDIAN); } ... or if you want the 0x80 byte highlighted as part of the block number (instead of skipping it), then do something like: /* Start counting from 13 */ for (rwe_pos = 13; rwe_pos < tvb_get_guint8(tvb, 12); rwe_pos+=2) { proto_tree_add_uint(felica_tree, hf_felica_block_nbr, tvb, rwe_pos, 2, tvb_get_guint8(tvb, rwe_pos + 1)); } - Chris ___________________________________________________________________________ Sent via: Wireshark-dev mailing list <wireshark-dev () wireshark org> Archives: http://www.wireshark.org/lists/wireshark-dev Unsubscribe: https://wireshark.org/mailman/options/wireshark-dev mailto:wireshark-dev-request () wireshark org?subject=unsubscribe
-- Fight Internet Censorship! http://www.eff.org http://vmlemon.wordpress.com | Twitter/FriendFeed/Skype: vmlemon | 00447934365844 ___________________________________________________________________________ Sent via: Wireshark-dev mailing list <wireshark-dev () wireshark org> Archives: http://www.wireshark.org/lists/wireshark-dev Unsubscribe: https://wireshark.org/mailman/options/wireshark-dev mailto:wireshark-dev-request () wireshark org?subject=unsubscribe
Current thread:
- Iteration in dissectors? Tyson Key (Jan 22)
- Re: Iteration in dissectors? Chris Maynard (Jan 22)
- Re: Iteration in dissectors? Tyson Key (Jan 22)
- Re: Iteration in dissectors? Chris Maynard (Jan 22)
- Re: Iteration in dissectors? Tyson Key (Jan 23)
- Re: Iteration in dissectors? Tyson Key (Jan 22)
- Re: Iteration in dissectors? Chris Maynard (Jan 22)
