summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSven Strickroth <email@cs-ware.de>2021-11-25 10:22:22 +0100
committerSven Strickroth <email@cs-ware.de>2021-12-06 13:28:07 +0100
commit433edb54b74cab470a1129cc8df5cbfaa0166c62 (patch)
treefda80786cfbb982be93278642df1cbde48876d15
parentf9c4dc10d90732cfbe2271dd58b01dd8f4003d15 (diff)
downloadlibgit2-433edb54b74cab470a1129cc8df5cbfaa0166c62.tar.gz
Config parsing confused by continuations that start with quotes
(fixes issue #6089) Signed-off-by: Sven Strickroth <email@cs-ware.de>
-rw-r--r--src/config_parse.c2
-rw-r--r--tests/config/read.c13
-rw-r--r--tests/resources/config/config2210
3 files changed, 24 insertions, 1 deletions
diff --git a/src/config_parse.c b/src/config_parse.c
index 3159cbef7..e96edc36d 100644
--- a/src/config_parse.c
+++ b/src/config_parse.c
@@ -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] == '#') &&
diff --git a/tests/config/read.c b/tests/config/read.c
index 3c96f8519..5d23ce471 100644
--- a/tests/config/read.c
+++ b/tests/config/read.c
@@ -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;
diff --git a/tests/resources/config/config22 b/tests/resources/config/config22
new file mode 100644
index 000000000..2a8e528ff
--- /dev/null
+++ b/tests/resources/config/config22
@@ -0,0 +1,10 @@
+[alias]
+ m = cmd \
+";;" \
+";;" \
+bar
+ m2 = '\
+";" \
+";" \
+something \
+'