X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fxmalloc.c;h=1dec2193a14e7546e62d690588cc037496b424ba;hb=bb84694ae5b1951689fe049bef536e5a73deb208;hp=f3ac0b7378551db9210f94e518faa7be05267fe1;hpb=473824797f568578dc17d7242551cb2f7ccef46c;p=yaz-moved-to-github.git diff --git a/src/xmalloc.c b/src/xmalloc.c index f3ac0b7..1dec219 100644 --- a/src/xmalloc.c +++ b/src/xmalloc.c @@ -14,6 +14,7 @@ #include #include #include +#include #include #include @@ -22,6 +23,9 @@ #define TRACE_XMALLOC 1 #endif +/* treat any size >1/4 of max value of size_t to be an error */ +#define MALLOC_SIZE_MAX ((size_t)(-1) / 4) + static int log_level = 0; static int log_level_initialized = 0; @@ -244,8 +248,9 @@ void xmalloc_trav_f(const char *s, const char *file, int line) xmalloc_trav_d(file, line); } -void xmalloc_fatal(void) +void xmalloc_fatal(size_t size) { + assert(size < MALLOC_SIZE_MAX); exit(1); } @@ -264,9 +269,9 @@ void *xrealloc_f(void *o, size_t size, const char *file, int line) "%s:%d: xrealloc(s=%ld) %p -> %p", file, line, (long) size, o, p); if (!p) { - yaz_log(YLOG_FATAL|YLOG_ERRNO, "Out of memory, realloc (%ld bytes)", - (long) size); - xmalloc_fatal(); + yaz_log(YLOG_FATAL, "%s:%d: Out of memory, realloc(%ld bytes)", + file, line, (long) size); + xmalloc_fatal(size); } return p; } @@ -287,9 +292,9 @@ void *xmalloc_f(size_t size, const char *file, int line) if (!p) { - yaz_log(YLOG_FATAL, "Out of memory - malloc (%ld bytes)", - (long) size); - xmalloc_fatal(); + yaz_log(YLOG_FATAL, "%s:%d: Out of memory - malloc(%ld bytes)", + file, line, (long) size); + xmalloc_fatal(size); } return p; } @@ -309,9 +314,9 @@ void *xcalloc_f(size_t nmemb, size_t size, const char *file, int line) if (!p) { - yaz_log(YLOG_FATAL, "Out of memory - calloc (%ld, %ld)", - (long) nmemb, (long) size); - xmalloc_fatal(); + yaz_log(YLOG_FATAL, "%s:%d: Out of memory - calloc(%ld, %ld)", + file, line, (long) nmemb, (long) size); + xmalloc_fatal(size); } return p; }