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()maint
commit
aaf524cfb0
|
|
@ -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;
|
size_t available = block ? block->end - block->next_free : 0;
|
||||||
va_list cp;
|
va_list cp;
|
||||||
int len, len2;
|
int len, len2;
|
||||||
|
size_t size;
|
||||||
char *ret;
|
char *ret;
|
||||||
|
|
||||||
va_copy(cp, ap);
|
va_copy(cp, ap);
|
||||||
|
|
@ -123,13 +124,14 @@ static char *mem_pool_strvfmt(struct mem_pool *pool, const char *fmt,
|
||||||
if (len < 0)
|
if (len < 0)
|
||||||
BUG("your vsnprintf is broken (returned %d)", len);
|
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. */
|
/* Shortcut; relies on mem_pool_alloc() not touching buffer contents. */
|
||||||
if (ret == next_free)
|
if (ret == next_free)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
len2 = vsnprintf(ret, len + 1, fmt, ap);
|
len2 = vsnprintf(ret, size, fmt, ap);
|
||||||
if (len2 != len)
|
if (len2 != len)
|
||||||
BUG("your vsnprintf is broken (returns inconsistent lengths)");
|
BUG("your vsnprintf is broken (returns inconsistent lengths)");
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue