aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-q931.c
diff options
context:
space:
mode:
authorGerald Combs <gerald@wireshark.org>2005-04-23 21:31:25 +0000
committerGerald Combs <gerald@wireshark.org>2005-04-23 21:31:25 +0000
commit46ebfe16b0a985ef4a38c763d82d181bdf586a59 (patch)
tree9203d2d73a67fa2643c549496724548a32815b66 /epan/dissectors/packet-q931.c
parentcf23c92003857421ad86ed4895ad1dc8efd96ccd (diff)
Don't try to free NULL. Don't overflow a buffer.
svn path=/trunk/; revision=14173
Diffstat (limited to 'epan/dissectors/packet-q931.c')
-rw-r--r--epan/dissectors/packet-q931.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/epan/dissectors/packet-q931.c b/epan/dissectors/packet-q931.c
index 53e0487657..ec7fec3d52 100644
--- a/epan/dissectors/packet-q931.c
+++ b/epan/dissectors/packet-q931.c
@@ -2428,7 +2428,8 @@ dissect_q931_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
{ /* info for the tap */
call_ref[0] &= 0x7F;
}
- g_memmove(&(q931_pi->crv), call_ref, call_ref_len);
+ /* XXX - Should crv be something besides a guint32? */
+ g_memmove(&(q931_pi->crv), call_ref, call_ref_len > sizeof(q931_pi->crv) ? sizeof(q931_pi->crv) : call_ref_len );
offset += call_ref_len;
}
message_type = tvb_get_guint8(tvb, offset);
@@ -3285,8 +3286,10 @@ static void reset_q931_packet_info(q931_packet_info *pi)
return;
}
- g_free(pi->calling_number);
- g_free(pi->called_number);
+ if (pi->calling_number)
+ g_free(pi->calling_number);
+ if (pi->called_number)
+ g_free(pi->called_number);
pi->calling_number = NULL;
pi->called_number = NULL;
pi->cause_value = 0xFF;