aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2024-04-10 10:00:08 -0700
committerJunio C Hamano <gitster@pobox.com>2024-04-10 10:00:08 -0700
commitaaf524cfb0707c28c3f9a08598a33abf11b24435 (patch)
treeee2aed53608b23b3fdb82d5af7341f0ab4bccfef
parentdc89c599518596d59ab9dba79ebfb9cdcab1994f (diff)
parentffeaf2f76ab422428d6190d0cfbca2f34f06602a (diff)
downloadgit-aaf524cfb0707c28c3f9a08598a33abf11b24435.tar.gz
Merge branch 'rs/mem-pool-size-t-safety'
size_t arithmetic safety. * rs/mem-pool-size-t-safety: mem-pool: use st_add() in mem_pool_strvfmt()
-rw-r--r--mem-pool.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/mem-pool.c b/mem-pool.c
index 2078c22b09..3065b12b23 100644
--- a/mem-pool.c
+++ b/mem-pool.c
@@ -115,6 +115,7 @@ static char *mem_pool_strvfmt(struct mem_pool *pool, const char *fmt,
size_t available = block ? block->end - block->next_free : 0;
va_list cp;
int len, len2;
+ size_t size;
char *ret;
va_copy(cp, ap);
@@ -123,13 +124,14 @@ static char *mem_pool_strvfmt(struct mem_pool *pool, const char *fmt,
if (len < 0)
BUG("your vsnprintf is broken (returned %d)", len);
- ret = mem_pool_alloc(pool, len + 1); /* 1 for NUL */
+ size = st_add(len, 1); /* 1 for NUL */
+ ret = mem_pool_alloc(pool, size);
/* Shortcut; relies on mem_pool_alloc() not touching buffer contents. */
if (ret == next_free)
return ret;
- len2 = vsnprintf(ret, len + 1, fmt, ap);
+ len2 = vsnprintf(ret, size, fmt, ap);
if (len2 != len)
BUG("your vsnprintf is broken (returns inconsistent lengths)");
return ret;