From f1ccbf903ec1473531815809424e701e5af88154 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Mon, 12 Jun 2017 06:52:58 -0700 Subject: lib: new chk_xalloc, with mult overflow check. This will simplify code that allocates an array-like object whose size is the product of two numbers. * lib.c (chk_xalloc): New function. * lib.h (chk_xalloc): Declared. --- lib.c | 12 ++++++++++++ lib.h | 1 + 2 files changed, 13 insertions(+) diff --git a/lib.c b/lib.c index 43d429df..06dc76ff 100644 --- a/lib.c +++ b/lib.c @@ -2699,6 +2699,18 @@ mem_t *chk_copy_obj(mem_t *orig, size_t size) return copy; } +mem_t *chk_xalloc(ucnum m, ucnum n, val self) +{ + ucnum mn = m * n; + size_t size = mn; + + if ((m > 0 && mn / m != n) || (ucnum) size != mn) + uw_throwf(error_s, lit("~s: memory allocation size overflow"), + self, nao); + + return chk_malloc(size); +} + val cons(val car, val cdr) { val obj; diff --git a/lib.h b/lib.h index bd5ddff8..ea644448 100644 --- a/lib.h +++ b/lib.h @@ -609,6 +609,7 @@ wchar_t *chk_strdup(const wchar_t *str); char *chk_strdup_utf8(const char *str); unsigned char *chk_strdup_8bit(const wchar_t *str); mem_t *chk_copy_obj(mem_t *orig, size_t size); +mem_t *chk_xalloc(ucnum m, ucnum n, val self); val cons(val car, val cdr); val make_lazy_cons(val func); val make_half_lazy_cons(val func, val car); -- cgit v1.2.3