string-util: improve overflow checking

The current overflow checking is broken in the corner case of the strings'
combined length being exactly SIZE_MAX: After the loop, l would be SIZE_MAX,
but we're not testing whether the l+1 expression overflows.

Fix it by simply pre-accounting for the final '\0': initialize l to 1 instead
of 0.
This commit is contained in:
Rasmus Villemoes 2020-10-30 10:18:04 +01:00
parent 020003f235
commit 6ced0770c7
1 changed files with 2 additions and 2 deletions

View File

@ -145,7 +145,7 @@ char *strnappend(const char *s, const char *suffix, size_t b) {
char *strjoin_real(const char *x, ...) {
va_list ap;
size_t l = 0;
size_t l = 1;
char *r, *p;
va_start(ap, x);
@ -161,7 +161,7 @@ char *strjoin_real(const char *x, ...) {
}
va_end(ap);
p = r = new(char, l+1);
p = r = new(char, l);
if (!r)
return NULL;