Merge pull request #12890 from yuwata/fix-conf-parser-12883

conf-parse: fix continuation handling
This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2019-06-27 08:13:14 +02:00 committed by GitHub
commit f9d269e14d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 15 additions and 7 deletions

View File

@ -322,7 +322,8 @@ int config_parse(const char *unit,
return r;
}
if (strchr(COMMENTS, *skip_leading_chars(buf, WHITESPACE)))
l = skip_leading_chars(buf, WHITESPACE);
if (*l != '\0' && strchr(COMMENTS, *l))
continue;
l = buf;

View File

@ -230,6 +230,13 @@ static const char* const config_file[] = {
"setting1=2\n"
"setting1=1\n", /* repeated settings */
"[Section]\n"
"[Section]\n"
"setting1=1\n"
"setting1=2\\\n"
" \n" /* empty line breaks continuation */
"setting1=1\n", /* repeated settings */
"[Section]\n"
"setting1=1\\\n" /* normal continuation */
"2\\\n"
@ -330,32 +337,32 @@ static void test_config_parse(unsigned i, const char *s) {
CONFIG_PARSE_WARN, NULL);
switch (i) {
case 0 ... 3:
case 0 ... 4:
assert_se(r == 0);
assert_se(streq(setting1, "1"));
break;
case 4 ... 9:
case 5 ... 10:
assert_se(r == 0);
assert_se(streq(setting1, "1 2 3"));
break;
case 10:
case 11:
assert_se(r == 0);
assert_se(streq(setting1, "1\\\\ \\\\2"));
break;
case 11:
case 12:
assert_se(r == 0);
assert_se(streq(setting1, x1000("ABCD")));
break;
case 12 ... 13:
case 13 ... 14:
assert_se(r == 0);
assert_se(streq(setting1, x1000("ABCD") " foobar"));
break;
case 14 ... 15:
case 15 ... 16:
assert_se(r == -ENOBUFS);
assert_se(setting1 == NULL);
break;