From 6ac18625869063a591828b33453148bf63e679e8 Mon Sep 17 00:00:00 2001 From: Sven Strickroth Date: Wed, 9 Sep 2020 17:51:38 +0200 Subject: Fix config file parsing with multi line values containing quoted parts Signed-off-by: Sven Strickroth --- src/config_parse.c | 2 +- tests/config/stress.c | 5 +++++ tests/resources/config/config12 | 10 ++++++++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/config_parse.c b/src/config_parse.c index 48ad1164f..ed2c87f6b 100644 --- a/src/config_parse.c +++ b/src/config_parse.c @@ -451,7 +451,7 @@ static int parse_variable(git_config_parser *reader, char **var_name, char **var git_buf_attach(&multi_value, value, 0); value = NULL; - if (parse_multiline_variable(reader, &multi_value, quote_count) < 0 || + if (parse_multiline_variable(reader, &multi_value, quote_count % 2) < 0 || git_buf_oom(&multi_value)) { error = -1; git_buf_dispose(&multi_value); diff --git a/tests/config/stress.c b/tests/config/stress.c index 28c3c4ac0..577452e8d 100644 --- a/tests/config/stress.c +++ b/tests/config/stress.c @@ -59,6 +59,11 @@ void test_config_stress__comments(void) assert_config_value(config, "some.section.multi", "hi, this is a ; multiline comment # with ;\n special chars and other stuff !@#"); assert_config_value(config, "some.section.multi2", "good, this is a ; multiline comment # with ;\n special chars and other stuff !@#"); assert_config_value(config, "some.section.back", "this is \ba phrase"); + assert_config_value(config, "some.section.dollar", "some $sign"); + assert_config_value(config, "some.section.multiquotes", "!ls x ls # comment2 $HOME"); + assert_config_value(config, "some.section.multiquotes2", "!ls x ls \"# comment2 $HOME\""); + assert_config_value(config, "some.section.multiquotes3", "hi # ho there are # more quotes"); + assert_config_value(config, "some.section.quotecomment", "hi # ho there are # more"); git_config_free(config); } diff --git a/tests/resources/config/config12 b/tests/resources/config/config12 index 6917880b5..2e92762df 100644 --- a/tests/resources/config/config12 +++ b/tests/resources/config/config12 @@ -11,3 +11,13 @@ and other stuff !@#" multiline comment # with ;\n special chars \ and other stuff !@#" #^^^ back = "this is \ba phrase" + dollar = some $sign + multiquotes = !ls "x" \ + ls "# comment2" \ + $HOME + multiquotes2 = !ls "x" \ + ls "\"# comment2" \ + $HOME\" + multiquotes3 = hi "# ho" there "are #" more \ +quotes + quotecomment = hi "# ho" there "are #" more # and a real comment -- cgit v1.2.1