From b275b122f704c1d4567536f3326b716264993705 Mon Sep 17 00:00:00 2001 From: krj Date: Thu, 24 Sep 2009 13:37:02 +0000 Subject: Make sure that we also traverse the free_list while looking for valid pointers git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@30113 f5534014-38df-0310-8fa8-9805f1628bb7 --- epan/emem.c | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/epan/emem.c b/epan/emem.c index 4fdb10ebcd..991704fce4 100644 --- a/epan/emem.c +++ b/epan/emem.c @@ -284,14 +284,23 @@ se_init_chunk(void) } static gboolean -emem_verify_pointer(emem_chunk_t *chunk, const void *ptr) +emem_verify_pointer(emem_header_t *hdr, const void *ptr) { const gchar *cptr = ptr; - - for ( ; chunk ; chunk = chunk->next) { - if (cptr >= (chunk->buf + chunk->free_offset_init) && - cptr < (chunk->buf + chunk->free_offset)) - return TRUE; + emem_chunk_t *used_list[2]; + guint8 used_list_idx; + emem_chunk_t *chunk; + + used_list[0] = hdr->free_list; + used_list[1] = hdr->used_list; + + for (used_list_idx=0; used_list_idx < G_N_ELEMENTS(used_list); ++used_list_idx) { + chunk = used_list[used_list_idx]; + for ( ; chunk ; chunk = chunk->next) { + if (cptr >= (chunk->buf + chunk->free_offset_init) && + cptr < (chunk->buf + chunk->free_offset)) + return TRUE; + } } return FALSE; @@ -300,13 +309,13 @@ emem_verify_pointer(emem_chunk_t *chunk, const void *ptr) gboolean ep_verify_pointer(const void *ptr) { - return emem_verify_pointer(ep_packet_mem.used_list, ptr); + return emem_verify_pointer(&ep_packet_mem, ptr); } gboolean se_verify_pointer(const void *ptr) { - return emem_verify_pointer(se_packet_mem.used_list, ptr); + return emem_verify_pointer(&se_packet_mem, ptr); } static void -- cgit v1.2.3