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]