X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/4191cb150300d310ab5fa22ce2cfb02b6f6051b0..766af058762b2c4e21b69f335adf77265fe9509a:/src/src/store.c?ds=sidebyside diff --git a/src/src/store.c b/src/src/store.c index 1e555cc18..d99d2ab69 100644 --- a/src/src/store.c +++ b/src/src/store.c @@ -2,8 +2,8 @@ * Exim - an Internet mail transport agent * *************************************************/ +/* Copyright (c) The Exim maintainers 2019 - 2022 */ /* Copyright (c) University of Cambridge 1995 - 2018 */ -/* Copyright (c) The Exim maintainers 2019 - 2021 */ /* See the file NOTICE for conditions of use and distribution. */ /* Exim gets and frees all its store through these functions. In the original @@ -259,7 +259,7 @@ return NULL; } static pooldesc * -pool_for_pointer(const void * p) +pool_for_pointer(const void * p, const char * func, int linenumber) { pooldesc * pp; storeblock * b; @@ -274,7 +274,11 @@ for (pp = paired_pools; pp < paired_pools + N_PAIRED_POOLS; pp++) for (b = pp->chainbase; b; b = b->next) if (is_pointer_in_block(b, p)) return pp; -log_write(0, LOG_MAIN|LOG_PANIC_DIE, "bad memory reference; pool not found"); +#ifndef COMPILE_UTILITY +stackdump(); +#endif +log_write(0, LOG_MAIN|LOG_PANIC_DIE, + "bad memory reference; pool not found, at %s %d", func, linenumber); return NULL; } @@ -379,7 +383,7 @@ allocated store. */ if (size < 0 || size >= INT_MAX/2) log_write(0, LOG_MAIN|LOG_PANIC_DIE, - "bad memory allocation requested (%d bytes) at %s %d", + "bad memory allocation requested (%d bytes) from %s %d", size, func, linenumber); /* Round up the size to a multiple of the alignment. Although this looks a @@ -713,7 +717,7 @@ BOOL store_extend_3(void * ptr, int oldsize, int newsize, const char * func, int linenumber) { -pooldesc * pp = pool_for_pointer(ptr); +pooldesc * pp = pool_for_pointer(ptr, func, linenumber); int inc = newsize - oldsize; int rounded_oldsize = oldsize; @@ -1105,7 +1109,7 @@ void * store_newblock_3(void * oldblock, int newsize, int len, const char * func, int linenumber) { -pooldesc * pp = pool_for_pointer(oldblock); +pooldesc * pp = pool_for_pointer(oldblock, func, linenumber); BOOL release_ok = !is_tainted(oldblock) && pp->store_last_get == oldblock; /*XXX why tainted not handled? */ uschar * newblock; @@ -1149,8 +1153,8 @@ a negative int, to the (unsigned, wider) size_t */ if (size >= INT_MAX/2) log_write(0, LOG_MAIN|LOG_PANIC_DIE, - "bad memory allocation requested (" SIZE_T_FMT " bytes) at %s %d", - size, func, line); + "bad internal_store_malloc request (" SIZE_T_FMT " bytes) from %s %d", + size, func, line); size += sizeof(size_t); /* space to store the size, used under debug */ if (size < 16) size = 16;