Does this patch help? If not, I would consider blaming guids_add_guid for not
initializing the key member of the emem_tree_key_t structure. Even though I
think either would be caught by the DISSECTOR_ASSERT_NOT_REACHED macro. Also,
are there warning for emem_tree_lookup32_array() as well?
-----Original Message-----
From: Jeff Morriss <[email protected]>
To: wireshark-dev <[email protected]>
Sent: Thu, Aug 9, 2012 4:06 pm
Subject: Re: [Wireshark-dev] [Wireshark-commits] rev 44380: /trunk/epan/
/trunk/epan/: emem.c
[email protected] wrote:
> http://anonsvn.wireshark.org/viewvc/viewvc.cgi?view=rev&revision=44380
>
> User: mmann
> Date: 2012/08/09 06:59 AM
>
> Log:
> Make emem_tree_*32_array functions non-destructive.
With this change Valgrind issues many, many warnings as Wireshark starts:
==10126== Conditional jump or move depends on uninitialised value(s)
==10126== at 0x6071DEF: emem_tree_insert32_array (emem.c:1887)
==10126== by 0x607874E: guids_add_guid (guid-utils.c:117)
==10126== by 0x62638CE: dcerpc_init_uuid (packet-dcerpc.c:830)
==10126== by 0x69E3061: register_all_protocol_handoffs (register.c:1360)
==10126== by 0x6085CA2: proto_init (proto.c:401)
==10126== by 0x6073565: epan_init (epan.c:113)
==10126== by 0x418AE5: main (tshark.c:963)
==10126==
==10126== More than 100 errors detected. Subsequent errors
==10126== will still be recorded, but in less detail than before.
___________________________________________________________________________
Sent via: Wireshark-dev mailing list <[email protected]>
Archives: http://www.wireshark.org/lists/wireshark-dev
Unsubscribe: https://wireshark.org/mailman/options/wireshark-dev
mailto:[email protected]?subject=unsubscribe
Index: epan/emem.c
===================================================================
--- epan/emem.c (revision 44392)
+++ epan/emem.c (working copy)
@@ -1869,8 +1869,7 @@
emem_tree_insert32_array(emem_tree_t *se_tree, emem_tree_key_t *key, void
*data)
{
int key_count = 0;
- emem_tree_key_t *local_key = key,
- *copy_key;
+ emem_tree_key_t *local_key = key;
if((key[0].length<1)||(key[0].length>100)){
DISSECTOR_ASSERT_NOT_REACHED();
@@ -1882,19 +1881,7 @@
local_key++;
}
- copy_key = ep_alloc(sizeof(emem_tree_key_t)*(key_count+1));
- local_key = copy_key;
- while ((key->key != NULL) && (key->length != 0)) {
- copy_key->length = key->length;
- copy_key->key = key->key;
- key++;
- copy_key++;
- }
-
- /* "NULL terminate" the key */
- copy_key->length = 0;
- copy_key->key = NULL;
-
+ local_key = ep_memdup(key, sizeof(emem_tree_key_t)*(key_count+1));
emem_tree_insert32_array_local(se_tree, local_key, data);
}
___________________________________________________________________________
Sent via: Wireshark-dev mailing list <[email protected]>
Archives: http://www.wireshark.org/lists/wireshark-dev
Unsubscribe: https://wireshark.org/mailman/options/wireshark-dev
mailto:[email protected]?subject=unsubscribe