Commit 6ac18625 by Sven Strickroth

Fix config file parsing with multi line values containing quoted parts

Signed-off-by: Sven Strickroth <email@cs-ware.de>
parent 1e987525
...@@ -451,7 +451,7 @@ static int parse_variable(git_config_parser *reader, char **var_name, char **var ...@@ -451,7 +451,7 @@ static int parse_variable(git_config_parser *reader, char **var_name, char **var
git_buf_attach(&multi_value, value, 0); git_buf_attach(&multi_value, value, 0);
value = NULL; 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)) { git_buf_oom(&multi_value)) {
error = -1; error = -1;
git_buf_dispose(&multi_value); git_buf_dispose(&multi_value);
......
...@@ -59,6 +59,11 @@ void test_config_stress__comments(void) ...@@ -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.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.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.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); git_config_free(config);
} }
......
...@@ -11,3 +11,13 @@ and other stuff !@#" ...@@ -11,3 +11,13 @@ and other stuff !@#"
multiline comment # with ;\n special chars \ multiline comment # with ;\n special chars \
and other stuff !@#" #^^^ and other stuff !@#" #^^^
back = "this is \ba phrase" 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
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment