$OpenBSD: patch-src_libjasper_base_jas_malloc_c,v 1.1 2008/05/17 09:32:16 espie Exp $ --- src/libjasper/base/jas_malloc.c.orig Fri Jan 19 22:43:05 2007 +++ src/libjasper/base/jas_malloc.c Fri May 16 21:39:45 2008 @@ -76,6 +76,8 @@ /* We need the prototype for memset. */ #include +#include +#include #include "jasper/jas_malloc.h" @@ -113,18 +115,50 @@ void jas_free(void *ptr) void *jas_realloc(void *ptr, size_t size) { - return realloc(ptr, size); + return ptr ? realloc(ptr, size) : malloc(size); } -void *jas_calloc(size_t nmemb, size_t size) +void *jas_realloc2(void *ptr, size_t nmemb, size_t size) { - void *ptr; + if (!ptr) + return jas_alloc2(nmemb, size); + if (nmemb && SIZE_MAX / nmemb < size) { + errno = ENOMEM; + return NULL; + } + return jas_realloc(ptr, nmemb * size); + +} + +void *jas_alloc2(size_t nmemb, size_t size) +{ + if (nmemb && SIZE_MAX / nmemb < size) { + errno = ENOMEM; + return NULL; + } + + return jas_malloc(nmemb * size); +} + +void *jas_alloc3(size_t a, size_t b, size_t c) +{ size_t n; - n = nmemb * size; - if (!(ptr = jas_malloc(n * sizeof(char)))) { - return 0; + + if (a && SIZE_MAX / a < b) { + errno = ENOMEM; + return NULL; } - memset(ptr, 0, n); + + return jas_alloc2(a*b, c); +} + +void *jas_calloc(size_t nmemb, size_t size) +{ + void *ptr; + + ptr = jas_alloc2(nmemb, size); + if (ptr) + memset(ptr, 0, nmemb*size); return ptr; }