summaryrefslogtreecommitdiff
path: root/xmalloc.c
diff options
context:
space:
mode:
authorTobias Klauser <tklauser@distanz.ch>2014-06-24 19:06:05 +0200
committerTobias Klauser <tklauser@distanz.ch>2014-06-25 10:18:09 +0200
commit46b0ace509d9ed013915e9ab8013c7c712e11395 (patch)
treea2882741a458995c1d3303bf87e6c88ea17724a2 /xmalloc.c
parent6424dd90f721fd968c1159236f525ed59f355045 (diff)
xmalloc: Add and use xcalloc
Add a wrapper for calloc which checks for integer overflows in the calculation of the size to allocate. Use xcalloc to allocate an array of objects instead of calculating the size ourselves, which might cause an integer overflow. Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
Diffstat (limited to 'xmalloc.c')
-rw-r--r--xmalloc.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/xmalloc.c b/xmalloc.c
index 02d6ce4..bdb6234 100644
--- a/xmalloc.c
+++ b/xmalloc.c
@@ -34,6 +34,21 @@ void *xmalloc(size_t size)
return ptr;
}
+void *xcalloc(size_t nmemb, size_t size)
+{
+ void *ptr;
+
+ if (unlikely(nmemb == 0 || size == 0))
+ panic("xcalloc: zero size\n");
+
+ ptr = calloc(nmemb, size);
+ if (unlikely(ptr == NULL))
+ panic("xcalloc: out of memory (allocating %zu members of "
+ "%zu bytes)\n", nmemb, size);
+
+ return ptr;
+}
+
void *xzmalloc(size_t size)
{
void *ptr = xmalloc(size);