X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Fxmalloc.c;h=1dec2193a14e7546e62d690588cc037496b424ba;hp=8a6932ac5fd49b667ce61092e2d85a84a76decde;hb=bb84694ae5b1951689fe049bef536e5a73deb208;hpb=0c46d2e66bdeea1600e700124a81a5d0a65d349e diff --git a/src/xmalloc.c b/src/xmalloc.c index 8a6932a..1dec219 100644 --- a/src/xmalloc.c +++ b/src/xmalloc.c @@ -1,5 +1,5 @@ /* This file is part of the YAZ toolkit. - * Copyright (C) 1995-2013 Index Data + * Copyright (C) Index Data * See the file LICENSE for details. */ /** @@ -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; }