From: Ondřej Surý Date: Thu, 5 Jun 2025 10:19:43 +0000 (+0200) Subject: Don't use ssize_t for storing difference between sizes X-Git-Tag: v9.21.10~9^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f689dc22973f528d375d8e197c9259c2d508c261;p=thirdparty%2Fbind9.git Don't use ssize_t for storing difference between sizes As POSIX guarantees only that the type ssize_t shall be capable of storing values at least in the range [-1, {SSIZE_MAX}], it can't be used to calculate the difference between two memory sizes. Change the logic for junk filling to test whether the new size is larger than old size and then use size_t as the result will be always positive. --- diff --git a/lib/isc/mem.c b/lib/isc/mem.c index bb2805c1b41..e7421e012e3 100644 --- a/lib/isc/mem.c +++ b/lib/isc/mem.c @@ -339,9 +339,9 @@ mem_realloc(isc_mem_t *ctx, void *old_ptr, size_t old_size, size_t new_size, if ((flags & ISC__MEM_ZERO) == 0 && (ctx->flags & ISC_MEMFLAG_FILL) != 0) { - ssize_t diff_size = new_size - old_size; - void *diff_ptr = (uint8_t *)new_ptr + old_size; - if (diff_size > 0) { + if (new_size > old_size) { + size_t diff_size = new_size - old_size; + void *diff_ptr = (uint8_t *)new_ptr + old_size; /* Mnemonic for "beef". */ memset(diff_ptr, 0xbe, diff_size); }