diff options
author | Nikolai Vladimirov <nikolay@vladimiroff.com> | 2013-08-08 21:17:32 +0300 |
---|---|---|
committer | Nikolai Vladimirov <nikolay@vladimiroff.com> | 2013-08-08 22:25:25 +0300 |
commit | c57f668268744cbccb13c30095a0c1649fb18a63 (patch) | |
tree | 4cbe2a6d43db3577fcc0ea2ef10b8fcb687eb37b /src/config_file.c | |
parent | c5780abb024a3d570bc1e7eb8c892a60b77bad84 (diff) | |
download | libgit2-c57f668268744cbccb13c30095a0c1649fb18a63.tar.gz |
config: allow empty string as value
`git_config_set_string(config, "config.section", "")` fails when
escaping the value.
The buffer in `escape_value` is allocated without NULL-termination. And
in case of empty string 0 is passed for buffer size in `git_buf_grow`.
`git_buf_detach` returns NULL when the allocated size is 0 and that
leads to an error return in `GITERR_CHECK_ALLOC` called after
`escape_value`
The change in `config_file.c` was suggested by Russell Belfer <rb@github.com>
Diffstat (limited to 'src/config_file.c')
-rw-r--r-- | src/config_file.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/config_file.c b/src/config_file.c index 2b0732a13..605e2e99c 100644 --- a/src/config_file.c +++ b/src/config_file.c @@ -1293,6 +1293,9 @@ static char *escape_value(const char *ptr) assert(ptr); len = strlen(ptr); + if (!len) + return git__calloc(1, sizeof(char)); + git_buf_grow(&buf, len); while (*ptr != '\0') { |