From a7415ab87fa5cc7cae356aa296e5c3fec4add1bf Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Wed, 31 Jan 2018 23:43:28 +0900 Subject: [PATCH] strv: fix buffer size calculation in strv_join_quoted() Fixes #8056. [fbui: the affected function was removed since v236+ (by commit 2e59b24) so the patch is not needed by upstream which was at v237+ when the issue was found.] rhel-only Resolves: #1989245 --- src/shared/strv.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/shared/strv.c b/src/shared/strv.c index e27ac68151..416373b183 100644 --- a/src/shared/strv.c +++ b/src/shared/strv.c @@ -353,21 +353,18 @@ char *strv_join_quoted(char **l) { size_t allocated = 0, len = 0; STRV_FOREACH(s, l) { - /* assuming here that escaped string cannot be more - * than twice as long, and reserving space for the - * separator and quotes. - */ _cleanup_free_ char *esc = NULL; size_t needed; - if (!GREEDY_REALLOC(buf, allocated, - len + strlen(*s) * 2 + 3)) - goto oom; - esc = cescape(*s); if (!esc) goto oom; + /* reserving space for the escaped text, separator, quotes and NULL terminator. */ + if (!GREEDY_REALLOC(buf, allocated, + len + strlen(esc) + 4)) + goto oom; + needed = snprintf(buf + len, allocated - len, "%s\"%s\"", len > 0 ? " " : "", esc); assert(needed < allocated - len);