aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkrj <krj@f5534014-38df-0310-8fa8-9805f1628bb7>2009-09-24 13:37:02 +0000
committerkrj <krj@f5534014-38df-0310-8fa8-9805f1628bb7>2009-09-24 13:37:02 +0000
commitb275b122f704c1d4567536f3326b716264993705 (patch)
tree4bdd79dbf9cd7d10e1d088b7f4ad9ca506686f27
parentb036ce05de612bb46c95fa695b1cd61fd4d2bae4 (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.c25
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