diff options
author | stig <stig@f5534014-38df-0310-8fa8-9805f1628bb7> | 2009-05-19 17:16:14 +0000 |
---|---|---|
committer | stig <stig@f5534014-38df-0310-8fa8-9805f1628bb7> | 2009-05-19 17:16:14 +0000 |
commit | 6ce6394a26aa87eb0b4b95ecd4725ef817a52612 (patch) | |
tree | c1f708812bd86cb9a2f2df53f0f5db677b603f40 /epan/dissectors/packet-isakmp.c | |
parent | e35b80409e2c1126a3470ef580f546d6c719bab5 (diff) |
From Artem Tamazov (bug 3472):
Save/Restore pinfo->private_data when used.
git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@28412 f5534014-38df-0310-8fa8-9805f1628bb7
Diffstat (limited to 'epan/dissectors/packet-isakmp.c')
-rw-r--r-- | epan/dissectors/packet-isakmp.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/epan/dissectors/packet-isakmp.c b/epan/dissectors/packet-isakmp.c index fe4b6d0223..7ed5fbfdc9 100644 --- a/epan/dissectors/packet-isakmp.c +++ b/epan/dissectors/packet-isakmp.c @@ -1000,6 +1000,8 @@ dissect_isakmp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) tvbuff_t *decr_tvb; proto_tree *decr_tree; address null_addr; + void *pd_save; + gboolean pd_changed = FALSE; #endif /* HAVE_LIBGCRYPT */ if (check_col(pinfo->cinfo, COL_PROTOCOL)) @@ -1055,7 +1057,9 @@ dissect_isakmp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) SE_COPY_ADDRESS(&decr->initiator, &pinfo->src); } + pd_save = pinfo->private_data; pinfo->private_data = decr; + pd_changed = TRUE; } else if (isakmp_version == 2) { ikev2_uat_data_key_t hash_key; ikev2_uat_data_t *ike_sa_data = NULL; @@ -1079,7 +1083,9 @@ dissect_isakmp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) ikev2_dec_data->encr_spec = ike_sa_data->encr_spec; ikev2_dec_data->auth_spec = ike_sa_data->auth_spec; + pd_save = pinfo->private_data; pinfo->private_data = ikev2_dec_data; + pd_changed = TRUE; } } #endif /* HAVE_LIBGCRYPT */ @@ -1151,6 +1157,7 @@ dissect_isakmp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) proto_tree_add_uint_format(isakmp_tree, hf_isakmp_length, tvb, offset, sizeof(hdr.length), hdr.length, "Length: (bogus, length is %u, should be at least %lu)", hdr.length, (unsigned long)ISAKMP_HDR_SIZE); + if (pd_changed) pinfo->private_data = pd_save; return; } @@ -1160,6 +1167,7 @@ dissect_isakmp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) proto_tree_add_uint_format(isakmp_tree, hf_isakmp_length, tvb, offset, sizeof(hdr.length), hdr.length, "Length: (bogus, length is %u, which is too large)", hdr.length); + if (pd_changed) pinfo->private_data = pd_save; return; } @@ -1187,6 +1195,7 @@ dissect_isakmp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) dissect_payloads(tvb, isakmp_tree, tree, isakmp_version, hdr.next_payload, offset, len, pinfo); } + if (pd_changed) pinfo->private_data = pd_save; } static proto_tree * |