From 2cf48e13262921c2c6e38668c1ea54d93c2117c8 Mon Sep 17 00:00:00 2001 From: Patrick Steinhardt Date: Mon, 20 Mar 2017 09:34:41 +0100 Subject: [PATCH] config_file: check if section header buffer runs out of memory While parsing section headers, we use a buffer to store the actual section name. We do not check though if the buffer runs out of memory at any stage. Do so. --- src/config_file.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/config_file.c b/src/config_file.c index cd5727c05..50c5a3d82 100644 --- a/src/config_file.c +++ b/src/config_file.c @@ -1041,8 +1041,9 @@ static int parse_section_header_ext(struct reader *reader, const char *line, con GITERR_CHECK_ALLOC_ADD(&alloc_len, base_name_len, quoted_len); GITERR_CHECK_ALLOC_ADD(&alloc_len, alloc_len, 2); - git_buf_grow(&buf, alloc_len); - git_buf_printf(&buf, "%s.", base_name); + if (git_buf_grow(&buf, alloc_len) < 0 || + git_buf_printf(&buf, "%s.", base_name) < 0) + goto end_parse; rpos = 0; @@ -1082,6 +1083,11 @@ static int parse_section_header_ext(struct reader *reader, const char *line, con } while (line + rpos < last_quote); end_parse: + if (git_buf_oom(&buf)) { + git_buf_free(&buf); + return -1; + } + if (line[rpos] != '"' || line[rpos + 1] != ']') { set_parse_error(reader, rpos, "Unexpected text after closing quotes"); git_buf_free(&buf);