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') { diff --git a/tests-clar/config/write.c b/tests-clar/config/write.c index d70612a97..57b02a7d9 100644 --- a/tests-clar/config/write.c +++ b/tests-clar/config/write.c @@ -242,3 +242,20 @@ void test_config_write__can_set_a_value_to_NULL(void) cl_git_sandbox_cleanup(); } + +void test_config_write__can_set_an_empty_value(void) +{ + git_repository *repository; + git_config *config; + const char * str; + + repository = cl_git_sandbox_init("testrepo.git"); + cl_git_pass(git_repository_config(&config, repository)); + + cl_git_pass(git_config_set_string(config, "core.somevar", "")); + cl_git_pass(git_config_get_string(&str, config, "core.somevar")); + cl_assert_equal_s(str, ""); + + git_config_free(config); + cl_git_sandbox_cleanup(); +}