From a530547a92f9e5d70bbec5fb0e4ff2a2f242b148 Mon Sep 17 00:00:00 2001 From: Sam Hocevar Date: Tue, 10 Jun 2008 16:21:17 +0000 Subject: [PATCH] * Do not try to free() on buffers that have been allocated with the real malloc, or we may crash unexpectedly, for instance if dlsym("free") calls malloc() then free() while free hasn't been loaded yet. --- src/lib-mem.c | 8 +++++++- src/libzzuf.c | 6 +++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/lib-mem.c b/src/lib-mem.c index 7e716ca..e0b58e6 100644 --- a/src/lib-mem.c +++ b/src/lib-mem.c @@ -110,6 +110,7 @@ static int64_t dummy_offset = 0; void _zz_mem_init(void) { + LOADSYM(free); LOADSYM(calloc); LOADSYM(malloc); LOADSYM(realloc); @@ -156,7 +157,12 @@ void NEW(free)(void *ptr) debug("%s(%p)", __func__, ptr); return; } - LOADSYM(free); + if(!ORIG(free)) + { + /* FIXME: memory leak */ + debug("%s(%p) IGNORED", __func__, ptr); + return; + } ORIG(free)(ptr); } diff --git a/src/libzzuf.c b/src/libzzuf.c index 1b34f86..a870745 100644 --- a/src/libzzuf.c +++ b/src/libzzuf.c @@ -102,13 +102,13 @@ void _zz_init(void) { char *tmp, *tmp2; - /* We need this as soon as possible */ - _zz_mem_init(); - tmp = getenv("ZZUF_DEBUG"); if(tmp) _zz_debugfd = atoi(tmp); + /* We need this as soon as possible */ + _zz_mem_init(); + tmp = getenv("ZZUF_SEED"); if(tmp && *tmp) _zz_setseed(atol(tmp));