diff options
author | Sven Strickroth <email@cs-ware.de> | 2021-11-25 10:22:22 +0100 |
---|---|---|
committer | Sven Strickroth <email@cs-ware.de> | 2021-12-06 13:28:07 +0100 |
commit | 433edb54b74cab470a1129cc8df5cbfaa0166c62 (patch) | |
tree | fda80786cfbb982be93278642df1cbde48876d15 | |
parent | f9c4dc10d90732cfbe2271dd58b01dd8f4003d15 (diff) | |
download | libgit2-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.c | 2 | ||||
-rw-r--r-- | tests/config/read.c | 13 | ||||
-rw-r--r-- | tests/resources/config/config22 | 10 |
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 \ +' |