diff options
author | Daniƫl van Eeden <git@myname.nl> | 2016-03-20 16:26:49 +0100 |
---|---|---|
committer | Michael Mann <mmann78@netscape.net> | 2016-03-20 18:20:23 +0000 |
commit | 93a3041bf541d07f20d68ac488a5d3c887edd35e (patch) | |
tree | 4c0e54274be87bb33bc8c34e2b5c5934e4820178 /epan/dissectors/packet-mysql.c | |
parent | 1e60d63c8c6882c8c0bdb00cf6df594e1bb6fccf (diff) |
Fix response ok packet with no session tracking info but flag set
Change-Id: I901ebc2128c92ef758b6b400cc8d86488a2115cb
Reviewed-on: https://code.wireshark.org/review/14537
Petri-Dish: Michael Mann <mmann78@netscape.net>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Michael Mann <mmann78@netscape.net>
Diffstat (limited to 'epan/dissectors/packet-mysql.c')
-rw-r--r-- | epan/dissectors/packet-mysql.c | 46 |
1 files changed, 24 insertions, 22 deletions
diff --git a/epan/dissectors/packet-mysql.c b/epan/dissectors/packet-mysql.c index 4c784a69fe..3685a0fb45 100644 --- a/epan/dissectors/packet-mysql.c +++ b/epan/dissectors/packet-mysql.c @@ -1800,30 +1800,32 @@ mysql_dissect_ok_packet(tvbuff_t *tvb, packet_info *pinfo, int offset, } if (conn_data->clnt_caps_ext & MYSQL_CAPS_ST) { - guint64 session_track_length; - proto_item *tf; - proto_item *session_track_tree = NULL; - int length; - - offset += tvb_get_fle(tvb, offset, &lenstr, NULL); - /* first read the optional message */ - if (lenstr) { - proto_tree_add_item(tree, hf_mysql_message, tvb, offset, (gint)lenstr, ENC_ASCII|ENC_NA); - offset += (int)lenstr; - } + if (tvb_reported_length_remaining(tvb, offset) > 0) { + guint64 session_track_length; + proto_item *tf; + proto_item *session_track_tree = NULL; + int length; - /* session state tracking */ - if (server_status & MYSQL_STAT_SESSION_STATE_CHANGED) { - fle = tvb_get_fle(tvb, offset, &session_track_length, NULL); - tf = proto_tree_add_item(tree, hf_mysql_session_track_data, tvb, offset, -1, ENC_NA); - session_track_tree = proto_item_add_subtree(tf, ett_session_track_data); - proto_tree_add_uint64(tf, hf_mysql_session_track_data_length, tvb, offset, fle, session_track_length); - offset += fle; + offset += tvb_get_fle(tvb, offset, &lenstr, NULL); + /* first read the optional message */ + if (lenstr) { + proto_tree_add_item(tree, hf_mysql_message, tvb, offset, (gint)lenstr, ENC_ASCII|ENC_NA); + offset += (int)lenstr; + } - while (session_track_length > 0) { - length = add_session_tracker_entry_to_tree(tvb, pinfo, session_track_tree, offset); - offset += length; - session_track_length -= length; + /* session state tracking */ + if (server_status & MYSQL_STAT_SESSION_STATE_CHANGED) { + fle = tvb_get_fle(tvb, offset, &session_track_length, NULL); + tf = proto_tree_add_item(tree, hf_mysql_session_track_data, tvb, offset, -1, ENC_NA); + session_track_tree = proto_item_add_subtree(tf, ett_session_track_data); + proto_tree_add_uint64(tf, hf_mysql_session_track_data_length, tvb, offset, fle, session_track_length); + offset += fle; + + while (session_track_length > 0) { + length = add_session_tracker_entry_to_tree(tvb, pinfo, session_track_tree, offset); + offset += length; + session_track_length -= length; + } } } } else { |