From 990b1a53ed800caac0bab1c2b7987205569861fe Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Fri, 24 May 2019 10:44:49 +0200 Subject: [PATCH] config: parse_string() fix the dynamic buffer allocation failure code (coverity) Signed-off-by: Jaroslav Kysela --- src/conf.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/conf.c b/src/conf.c index 3a3c91bf..3e4b76a3 100644 --- a/src/conf.c +++ b/src/conf.c @@ -4747,8 +4747,11 @@ static int parse_string(const char **ptr, char **val) return -EINVAL; case '\\': c = parse_char(ptr); - if (c < 0) + if (c < 0) { + if (alloc > bufsize) + free(buf); return c; + } break; default: (*ptr)++; @@ -4768,12 +4771,17 @@ static int parse_string(const char **ptr, char **val) alloc *= 2; if (old_alloc == bufsize) { buf = malloc(alloc); + if (!buf) + return -ENOMEM; memcpy(buf, _buf, old_alloc); } else { - buf = realloc(buf, alloc); + char *buf2 = realloc(buf, alloc); + if (!buf2) { + free(buf); + return -ENOMEM; + } + buf = buf2; } - if (!buf) - return -ENOMEM; } buf[idx++] = c; } -- 2.47.1