Config parsing confused by continuations that start with quotes

(fixes issue #6089)

Signed-off-by: Sven Strickroth <email@cs-ware.de>
This commit is contained in:
Sven Strickroth
2021-11-25 10:22:22 +01:00
parent f9c4dc10d9
commit 433edb54b7
3 changed files with 24 additions and 1 deletions

View File

@@ -36,7 +36,7 @@ static int strip_comments(char *line, int in_quotes)
char *ptr;
for (ptr = line; *ptr; ++ptr) {
if (ptr[0] == '"' && ptr > line && ptr[-1] != '\\')
if (ptr[0] == '"' && ((ptr > line && ptr[-1] != '\\') || ptr == line))
quote_count++;
if ((ptr[0] == ';' || ptr[0] == '#') &&

View File

@@ -219,6 +219,19 @@ void test_config_read__multiline_multiple_quoted_comment_chars(void)
git_config_free(cfg);
}
void test_config_read__multiline_multiple_quoted_quote_at_beginning_of_line(void)
{
git_config* cfg;
cl_git_pass(git_config_open_ondisk(&cfg, cl_fixture("config/config22")));
cl_git_pass(git_config_get_string_buf(&buf, cfg, "alias.m"));
cl_assert_equal_s("cmd ;; ;; bar", buf.ptr);
git_buf_dispose(&buf);
cl_git_pass(git_config_get_string_buf(&buf, cfg, "alias.m2"));
cl_assert_equal_s("'; ; something '", buf.ptr);
git_buf_dispose(&buf);
git_config_free(cfg);
}
void test_config_read__header_in_last_line(void)
{
git_config *cfg;

10
tests/resources/config/config22 vendored Normal file
View File

@@ -0,0 +1,10 @@
[alias]
m = cmd \
";;" \
";;" \
bar
m2 = '\
";" \
";" \
something \
'