aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors
diff options
context:
space:
mode:
authorPascal Quantin <pascal.quantin@gmail.com>2013-08-19 10:39:43 +0000
committerPascal Quantin <pascal.quantin@gmail.com>2013-08-19 10:39:43 +0000
commit81b6d6aab35eabd3c9687f3f2eb37466855fc137 (patch)
treec1b1f9007c72d8b33eea3271e54f7d0f139b7678 /epan/dissectors
parentb38ec03858d0c15811d2dc843379a61e3554ac9b (diff)
Do not use ephemeral memory when adding a new data source
svn path=/trunk/; revision=51423
Diffstat (limited to 'epan/dissectors')
-rw-r--r--epan/dissectors/packet-ansi_637.c18
-rw-r--r--epan/dissectors/packet-ansi_a.c2
-rw-r--r--epan/dissectors/packet-bmc.c3
-rw-r--r--epan/dissectors/packet-cell_broadcast.c6
-rw-r--r--epan/dissectors/packet-dcerpc-netlogon.c3
-rw-r--r--epan/dissectors/packet-lapsat.c4
-rw-r--r--epan/dissectors/packet-opensafety.c4
-rw-r--r--epan/dissectors/packet-rlc-lte.c3
-rw-r--r--epan/dissectors/packet-rohc.c3
-rw-r--r--epan/dissectors/packet-snmp.c8
-rw-r--r--epan/dissectors/packet-xml.c3
11 files changed, 38 insertions, 19 deletions
diff --git a/epan/dissectors/packet-ansi_637.c b/epan/dissectors/packet-ansi_637.c
index 9e7ddff68d..8e102ba511 100644
--- a/epan/dissectors/packet-ansi_637.c
+++ b/epan/dissectors/packet-ansi_637.c
@@ -572,7 +572,7 @@ tele_param_user_data(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset)
saved_offset = offset - 1;
i = num_fields * 7;
required_octs = (i / 8) + ((i % 8) ? 1 : 0);
- buf = (gchar*)ep_alloc(required_octs);
+ buf = (gchar*)g_malloc(required_octs);
for (i=0; i < required_octs; i++)
{
oct = tvb_get_guint8(tvb, saved_offset);
@@ -581,6 +581,7 @@ tele_param_user_data(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset)
saved_offset++;
}
tvb_out = tvb_new_child_real_data(tvb, buf, required_octs, required_octs);
+ tvb_set_free_cb(tvb_out, g_free);
add_new_data_source(g_pinfo, tvb_out, "Characters");
offset = 0;
bit = 0;
@@ -634,7 +635,7 @@ tele_param_user_data(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset)
saved_offset = offset - 1;
i = num_fields * 7;
required_octs = (i / 8) + ((i % 8) ? 1 : 0);
- buf = (gchar*)ep_alloc(required_octs);
+ buf = (gchar*)g_malloc(required_octs);
for (i=0; i < required_octs; i++)
{
oct = tvb_get_guint8(tvb, saved_offset);
@@ -643,6 +644,7 @@ tele_param_user_data(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset)
saved_offset++;
}
tvb_out = tvb_new_child_real_data(tvb, buf, required_octs, required_octs);
+ tvb_set_free_cb(tvb_out, g_free);
add_new_data_source(g_pinfo, tvb_out, "Characters");
offset = 0;
bit = 0;
@@ -664,7 +666,7 @@ tele_param_user_data(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset)
{
saved_offset = offset - 1;
required_octs = 2*num_fields;
- buf = (gchar*)ep_alloc(required_octs);
+ buf = (gchar*)g_malloc(required_octs);
for (i=0; i < required_octs; i++)
{
oct = tvb_get_guint8(tvb, saved_offset);
@@ -673,6 +675,7 @@ tele_param_user_data(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset)
saved_offset++;
}
tvb_out = tvb_new_child_real_data(tvb, buf, required_octs, required_octs);
+ tvb_set_free_cb(tvb_out, g_free);
add_new_data_source(g_pinfo, tvb_out, "Characters");
offset = 0;
if (g_pinfo->private_data && (GPOINTER_TO_UINT(g_pinfo->private_data) == TRUE)) {
@@ -699,7 +702,7 @@ tele_param_user_data(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset)
else if (encoding == 0x07)/* Latin/Hebrew */
{
saved_offset = offset - 1;
- buf = (gchar*)ep_alloc(num_fields);
+ buf = (gchar*)g_malloc(num_fields);
for (i=0; i < num_fields; i++)
{
oct = tvb_get_guint8(tvb, saved_offset);
@@ -708,6 +711,7 @@ tele_param_user_data(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset)
saved_offset++;
}
tvb_out = tvb_new_child_real_data(tvb, buf, num_fields, num_fields);
+ tvb_set_free_cb(tvb_out, g_free);
add_new_data_source(g_pinfo, tvb_out, "Characters");
offset = 0;
required_octs = len - used;
@@ -735,7 +739,7 @@ tele_param_user_data(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset)
else if (encoding == 0x08) /* ISO 8859-1 (a/k/a ISO Latin 1) */
{
saved_offset = offset - 1;
- buf = (gchar*)ep_alloc(num_fields);
+ buf = (gchar*)g_malloc(num_fields);
for (i=0; i < num_fields; i++)
{
oct = tvb_get_guint8(tvb, saved_offset);
@@ -744,6 +748,7 @@ tele_param_user_data(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset)
saved_offset++;
}
tvb_out = tvb_new_child_real_data(tvb, buf, num_fields, num_fields);
+ tvb_set_free_cb(tvb_out, g_free);
add_new_data_source(g_pinfo, tvb_out, "Characters");
offset = 0;
required_octs = len - used;
@@ -785,7 +790,7 @@ tele_param_user_data(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset)
saved_offset = offset - 1;
i = num_fields * 7;
required_octs = (i / 8) + ((i % 8) ? 1 : 0);
- buf = (gchar*)ep_alloc(required_octs);
+ buf = (gchar*)g_malloc(required_octs);
for (i=0; i < required_octs; i++)
{
oct = tvb_get_guint8(tvb, saved_offset);
@@ -794,6 +799,7 @@ tele_param_user_data(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset)
saved_offset++;
}
tvb_out = tvb_new_child_real_data(tvb, buf, required_octs, required_octs);
+ tvb_set_free_cb(tvb_out, g_free);
add_new_data_source(g_pinfo, tvb_out, "Characters");
offset = 0;
bit = 0;
diff --git a/epan/dissectors/packet-ansi_a.c b/epan/dissectors/packet-ansi_a.c
index fbc75c8317..35256323b0 100644
--- a/epan/dissectors/packet-ansi_a.c
+++ b/epan/dissectors/packet-ansi_a.c
@@ -11956,7 +11956,7 @@ dissect_sip_dtap_bsmap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
if ((linelen = tvb_find_line_end(tvb, offset, -1, &next_offset, TRUE)) > 0) {
if (linelen >= 2) {
ansi_a_tvb = tvb_new_composite();
- msg_type = (guint8*)wmem_alloc(wmem_packet_scope(), 1);
+ msg_type = (guint8*)wmem_alloc(pinfo->pool, 1);
msg_type[0] = (guint8)strtoul(tvb_get_ephemeral_string(tvb, offset, 2), NULL, 16);
if ((begin = tvb_find_guint8(tvb, offset, linelen, '"')) > 0) {
if (tvb_get_guint8(tvb, begin + 1) == '1') {
diff --git a/epan/dissectors/packet-bmc.c b/epan/dissectors/packet-bmc.c
index ce6fe858d3..e7ff73b6b3 100644
--- a/epan/dissectors/packet-bmc.c
+++ b/epan/dissectors/packet-bmc.c
@@ -103,7 +103,7 @@ dissect_bmc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
/* Needs bit-reversing. Create a new buffer, copy the message to it and bit-reverse */
len = tvb_length(tvb);
- reversing_buffer = (guint8 *)ep_tvb_memdup(tvb, offset, len);
+ reversing_buffer = (guint8 *)tvb_memdup(tvb, offset, len);
p_rev = reversing_buffer;
/* Entire message is bit reversed */
for (i=0; i<len; i++, p_rev++)
@@ -111,6 +111,7 @@ dissect_bmc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
/* Make this new buffer part of the display and provide a way to dispose of it */
bit_reversed_tvb = tvb_new_child_real_data(tvb, reversing_buffer, len, len);
+ tvb_set_free_cb(bit_reversed_tvb, g_free);
add_new_data_source(pinfo, bit_reversed_tvb, "Bit-reversed Data");
message_type = tvb_get_guint8(bit_reversed_tvb, offset);
diff --git a/epan/dissectors/packet-cell_broadcast.c b/epan/dissectors/packet-cell_broadcast.c
index bd5736840b..087575ba1c 100644
--- a/epan/dissectors/packet-cell_broadcast.c
+++ b/epan/dissectors/packet-cell_broadcast.c
@@ -254,7 +254,7 @@ tvbuff_t * dissect_cbs_data(guint8 sms_encoding, tvbuff_t *tvb, proto_tree *tree
tvbuff_t * tvb_out = NULL;
guint8 out_len;
int length = tvb_length(tvb) - offset;
- gchar *utf8_text = NULL;
+ gchar *utf8_text = NULL, *utf8_out;
static unsigned char msgbuf[1024];
guint8 * input_string = tvb_get_ephemeral_string(tvb, offset, length);
GIConv cd;
@@ -268,7 +268,9 @@ tvbuff_t * dissect_cbs_data(guint8 sms_encoding, tvbuff_t *tvb, proto_tree *tree
msgbuf);
msgbuf[out_len] = '\0';
utf8_text = gsm_sms_chars_to_utf8(msgbuf, out_len);
- tvb_out = tvb_new_child_real_data(tvb, utf8_text, out_len, out_len);
+ utf8_out = g_strdup(utf8_text);
+ tvb_out = tvb_new_child_real_data(tvb, utf8_out, out_len, out_len);
+ tvb_set_free_cb(tvb_out, g_free);
add_new_data_source(pinfo, tvb_out, "unpacked 7 bit data");
break;
diff --git a/epan/dissectors/packet-dcerpc-netlogon.c b/epan/dissectors/packet-dcerpc-netlogon.c
index 2a33402978..c0314cbeea 100644
--- a/epan/dissectors/packet-dcerpc-netlogon.c
+++ b/epan/dissectors/packet-dcerpc-netlogon.c
@@ -7981,10 +7981,11 @@ dissect_packet_data(tvbuff_t *tvb ,tvbuff_t *auth_tvb _U_,
}
crypt_rc4_init(&rc4state,vars->encryption_key,16);
crypt_rc4(&rc4state,(guint8*)&copyconfounder,8);
- decrypted = (guint8*)ep_tvb_memdup(tvb, offset,data_len);
+ decrypted = (guint8*)tvb_memdup(tvb, offset,data_len);
crypt_rc4_init(&rc4state,vars->encryption_key,16);
crypt_rc4(&rc4state,decrypted,data_len);
buf = tvb_new_child_real_data(tvb, decrypted, data_len, data_len);
+ tvb_set_free_cb(buf, g_free);
/* Note: caller does add_new_data_source(...) */
}
else {
diff --git a/epan/dissectors/packet-lapsat.c b/epan/dissectors/packet-lapsat.c
index beda41f7d8..9c07c15a39 100644
--- a/epan/dissectors/packet-lapsat.c
+++ b/epan/dissectors/packet-lapsat.c
@@ -504,10 +504,10 @@ dissect_lapsat(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
if ((plen + hlen) == tvb_length(tvb)) {
/* Need to integrate the last nibble */
- guint8 *data = (guint8 *)ep_alloc(plen);
- tvb_memcpy(tvb, data, hlen, plen);
+ guint8 *data = (guint8 *)tvb_memdup(tvb, hlen, plen);
data[plen-1] |= tvb_get_guint8(tvb, 2) << 4;
payload = tvb_new_child_real_data(tvb, data, plen, plen);
+ tvb_set_free_cb(payload, g_free);
} else {
/* Last nibble doesn't need merging */
payload = tvb_new_subset(tvb, hlen, plen, -1);
diff --git a/epan/dissectors/packet-opensafety.c b/epan/dissectors/packet-opensafety.c
index 1d30839dce..ec11ecde8e 100644
--- a/epan/dissectors/packet-opensafety.c
+++ b/epan/dissectors/packet-opensafety.c
@@ -45,6 +45,7 @@
#include <epan/prefs.h>
#include <epan/etypes.h>
#include <epan/emem.h>
+#include <epan/wmem/wmem.h>
#include <epan/expert.h>
#include <epan/reassemble.h>
#include <epan/strutil.h>
@@ -1802,7 +1803,8 @@ opensafety_package_dissector(const gchar *protocolName, const gchar *sub_diss_ha
}
reported_len = tvb_reported_length_remaining(given_tvb, 0);
- bytes = (guint8 *) ep_tvb_memdup(given_tvb, 0, length);
+ bytes = (guint8 *) wmem_alloc(pinfo->pool, length);
+ tvb_memcpy(given_tvb, bytes, 0, length);
if ( do_byte_swap == TRUE && global_mbtcp_big_endian == TRUE )
{
diff --git a/epan/dissectors/packet-rlc-lte.c b/epan/dissectors/packet-rlc-lte.c
index 1cce110b9c..ced995bdac 100644
--- a/epan/dissectors/packet-rlc-lte.c
+++ b/epan/dissectors/packet-rlc-lte.c
@@ -488,7 +488,7 @@ static tvbuff_t* reassembly_get_reassembled_tvb(rlc_channel_reassembly_info *rea
for (n=0; n < reassembly_info->number_of_segments; n++) {
combined_length += reassembly_info->segments[n].length;
}
- combined_data = (guint8 *)ep_alloc(combined_length);
+ combined_data = (guint8 *)g_malloc(combined_length);
/* Copy data into contiguous buffer */
for (n=0; n < reassembly_info->number_of_segments; n++) {
@@ -500,6 +500,7 @@ static tvbuff_t* reassembly_get_reassembled_tvb(rlc_channel_reassembly_info *rea
/* Create and return tvb with this data */
reassembled_tvb = tvb_new_child_real_data(parent_tvb, combined_data, combined_offset, combined_offset);
+ tvb_set_free_cb(reassembled_tvb, g_free);
add_new_data_source(pinfo, reassembled_tvb, "Reassembled SDU");
return reassembled_tvb;
}
diff --git a/epan/dissectors/packet-rohc.c b/epan/dissectors/packet-rohc.c
index 1c979515ab..353bd2b283 100644
--- a/epan/dissectors/packet-rohc.c
+++ b/epan/dissectors/packet-rohc.c
@@ -2295,10 +2295,11 @@ start_over:
len = tvb_length_remaining(tvb, offset);
if (len >= val_len) {
len -= val_len;
- data = (guint8 *)ep_alloc(len);
+ data = (guint8 *)g_malloc(len);
tvb_memcpy(tvb, data, offset, 1);
tvb_memcpy(tvb, &data[1], offset+1+val_len, len-1);
next_tvb = tvb_new_child_real_data(tvb, data, len, len);
+ tvb_set_free_cb(next_tvb, g_free);
add_new_data_source(pinfo, next_tvb, "Payload");
}
}
diff --git a/epan/dissectors/packet-snmp.c b/epan/dissectors/packet-snmp.c
index e8ce3b156c..10d8c05b9f 100644
--- a/epan/dissectors/packet-snmp.c
+++ b/epan/dissectors/packet-snmp.c
@@ -1696,7 +1696,7 @@ snmp_usm_priv_des(snmp_usm_params_t* p _U_, tvbuff_t* encryptedData _U_, gchar c
cryptgrm = (guint8*)ep_tvb_memdup(encryptedData,0,-1);
- cleartext = (guint8*)ep_alloc(cryptgrm_len);
+ cleartext = (guint8*)g_malloc(cryptgrm_len);
err = gcry_cipher_open(&hd, GCRY_CIPHER_DES, GCRY_CIPHER_MODE_CBC, 0);
if (err != GPG_ERR_NO_ERROR) goto on_gcry_error;
@@ -1713,10 +1713,12 @@ snmp_usm_priv_des(snmp_usm_params_t* p _U_, tvbuff_t* encryptedData _U_, gchar c
gcry_cipher_close(hd);
clear_tvb = tvb_new_child_real_data(encryptedData, cleartext, cryptgrm_len, cryptgrm_len);
+ tvb_set_free_cb(clear_tvb, g_free);
return clear_tvb;
on_gcry_error:
+ g_free(cleartext);
*error = (const gchar *)gpg_strerror(err);
if (hd) gcry_cipher_close(hd);
return NULL;
@@ -1766,7 +1768,7 @@ snmp_usm_priv_aes_common(snmp_usm_params_t* p, tvbuff_t* encryptedData, gchar co
}
cryptgrm = (guint8*)ep_tvb_memdup(encryptedData,0,-1);
- cleartext = (guint8*)ep_alloc(cryptgrm_len);
+ cleartext = (guint8*)g_malloc(cryptgrm_len);
err = gcry_cipher_open(&hd, algo, GCRY_CIPHER_MODE_CFB, 0);
if (err != GPG_ERR_NO_ERROR) goto on_gcry_error;
@@ -1783,10 +1785,12 @@ snmp_usm_priv_aes_common(snmp_usm_params_t* p, tvbuff_t* encryptedData, gchar co
gcry_cipher_close(hd);
clear_tvb = tvb_new_child_real_data(encryptedData, cleartext, cryptgrm_len, cryptgrm_len);
+ tvb_set_free_cb(clear_tvb, g_free);
return clear_tvb;
on_gcry_error:
+ g_free(cleartext);
*error = (const gchar *)gpg_strerror(err);
if (hd) gcry_cipher_close(hd);
return NULL;
diff --git a/epan/dissectors/packet-xml.c b/epan/dissectors/packet-xml.c
index ded7c3c219..0f94ed4a14 100644
--- a/epan/dissectors/packet-xml.c
+++ b/epan/dissectors/packet-xml.c
@@ -236,8 +236,9 @@ static gboolean dissect_xml_heur(tvbuff_t *tvb, packet_info *pinfo, proto_tree *
dissect_xml(tvb, pinfo, tree);
return TRUE;
} else if (pref_heuristic_unicode) {
- const guint8 *data_str = tvb_get_ephemeral_unicode_string(tvb, 0, tvb_length(tvb), ENC_LITTLE_ENDIAN);
+ const guint8 *data_str = tvb_get_unicode_string(tvb, 0, tvb_length(tvb), ENC_LITTLE_ENDIAN);
tvbuff_t *unicode_tvb = tvb_new_child_real_data(tvb, data_str, tvb_length(tvb)/2, tvb_length(tvb)/2);
+ tvb_set_free_cb(unicode_tvb, g_free);
if (tvbparse_peek(tvbparse_init(unicode_tvb, 0, -1, NULL, want_ignore), want_heur)) {
add_new_data_source(pinfo, unicode_tvb, "UTF8");
dissect_xml(unicode_tvb, pinfo, tree);