pgpool2.git / summary / log / commit / refs
commit efc425c1356bdaaab80e4becf722e876d6d28f1b
Author: Yoshiyuki Asaba <y-asaba at pgfoundry.org>
Date: Fri Nov 10 03:48:51 2006 +0000
* Add NULL checking in pool_memory_free().
* Fix SIGSEGV in pool_memory_alloc() if allocate size is 8192 byte.
void *x;
pool_memory = pool_memory_create();
x = pool_memory_alloc(pool_memory, 8192);
parser/pool_memory.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/parser/pool_memory.c b/parser/pool_memory.c
index e90d6aa2a..1f8c5ed06 100644
--- a/parser/pool_memory.c
+++ b/parser/pool_memory.c
@@ -84,7 +84,7 @@ void *pool_memory_alloc(POOL_MEMORY_POOL *pool, unsigned int size)
}
else
{
- int fidx = get_free_index(size + POOL_HEADER_SIZE);
+ int fidx = get_free_index(size);
int allocsize = 1 << (fidx + ALIGN);
/* pick up from freelist */
@@ -150,6 +150,9 @@ void pool_memory_free(POOL_MEMORY_POOL *pool, void *ptr)
POOL_CHUNK *chunk = ptr - POOL_HEADER_SIZE;
int fidx;
+ if (ptr == NULL)
+ return;
+
if (chunk->header.size > MAX_SIZE)
{
POOL_BLOCK *block, *ptr = NULL;
@@ -160,6 +163,12 @@ void pool_memory_free(POOL_MEMORY_POOL *pool, void *ptr)
break;
}
+ if (block == NULL)
+ {
+ pool_log("An adress \"%p\" does not exist in memory pool.", chunk);
+ return;
+ }
+
if (ptr == NULL)
{
pool->largeblocks = block->next;
[parent: a93198d1218a]