From a2daa89be5647e6c51c899e511604bfa53d1e318 Mon Sep 17 00:00:00 2001 From: Igor Malovitsa Date: Wed, 6 Mar 2024 21:05:21 +0200 Subject: [PATCH] more oob checks --- hbas.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/hbas.c b/hbas.c index f36909a..2e876d6 100644 --- a/hbas.c +++ b/hbas.c @@ -351,7 +351,13 @@ typedef struct ByteVec_s { } ByteVec; AsmError ensure_push(ByteVec *vec, size_t el_size, size_t extra) { + if (vec->len + extra < vec->len) { + return ErrOutOfMemory; + } while (vec->len + extra > vec->cap) { + if ((~(size_t)0) / 2 < vec->cap) { + return ErrOutOfMemory; + } vec->cap *= 2; // multiply overflow if ((~(size_t)0) / el_size < vec->cap) { @@ -705,11 +711,11 @@ AsmError assemble_instr( } // num_to_write = num_to_write ^ is_negative - is_negative; if (is_negative) { - int64_t tmp = (int64_t)num_to_write; - if (tmp < 0) { + int64_t tmp = -(int64_t)num_to_write; + if (tmp > 0) { return ErrBadNumOverflow; } - num_to_write = (uint64_t)(-tmp); + num_to_write = (uint64_t)tmp; } AsmError err = push_int_le( &rv->buf[rv->len], num_to_write, meta.size, meta.sign