aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-isakmp.c
diff options
context:
space:
mode:
authorstig <stig@f5534014-38df-0310-8fa8-9805f1628bb7>2009-05-19 17:16:14 +0000
committerstig <stig@f5534014-38df-0310-8fa8-9805f1628bb7>2009-05-19 17:16:14 +0000
commit6ce6394a26aa87eb0b4b95ecd4725ef817a52612 (patch)
treec1f708812bd86cb9a2f2df53f0f5db677b603f40 /epan/dissectors/packet-isakmp.c
parente35b80409e2c1126a3470ef580f546d6c719bab5 (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.c9
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 *