diff options
author | krj <krj@f5534014-38df-0310-8fa8-9805f1628bb7> | 2009-09-24 13:37:02 +0000 |
---|---|---|
committer | krj <krj@f5534014-38df-0310-8fa8-9805f1628bb7> | 2009-09-24 13:37:02 +0000 |
commit | b275b122f704c1d4567536f3326b716264993705 (patch) | |
tree | 4bdd79dbf9cd7d10e1d088b7f4ad9ca506686f27 | |
parent | b036ce05de612bb46c95fa695b1cd61fd4d2bae4 (diff) |
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
-rw-r--r-- | epan/emem.c | 25 |
1 files 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 |