conf-parser: ignore trailing back-slash in comment

Fixes #10598.
This commit is contained in:
Yu Watanabe 2018-11-06 13:22:09 +09:00
parent 8d2411f693
commit 9adbfeb38a
2 changed files with 21 additions and 6 deletions

View File

@ -174,7 +174,7 @@ static int parse_line(
if (!*l)
return 0;
if (strchr(COMMENTS "\n", *l))
if (*l == '\n')
return 0;
include = first_word(l, ".include");
@ -327,6 +327,9 @@ int config_parse(const char *unit,
return r;
}
if (strchr(COMMENTS, *buf))
continue;
l = buf;
if (!(flags & CONFIG_PARSE_REFUSE_BOM)) {
char *q;

View File

@ -274,6 +274,18 @@ static const char* const config_file[] = {
"2\\\n"
"3\n",
"[Section]\n"
"#hogehoge\\\n" /* continuation is ignored in comment */
"setting1=1\\\n" /* normal continuation */
"2\\\n"
"3\n",
"[Section]\n"
"setting1=1\\\n" /* normal continuation */
"#hogehoge\\\n" /* commented out line in continuation is ignored */
"2\\\n"
"3\n",
"[Section]\n"
"setting1=1\\\n" /* continuation with extra trailing backslash at the end */
"2\\\n"
@ -350,27 +362,27 @@ static void test_config_parse(unsigned i, const char *s) {
assert_se(streq(setting1, "1"));
break;
case 4 ... 5:
case 4 ... 7:
assert_se(r == 0);
assert_se(streq(setting1, "1 2 3"));
break;
case 6:
case 8:
assert_se(r == 0);
assert_se(streq(setting1, "1\\\\ \\\\2"));
break;
case 7:
case 9:
assert_se(r == 0);
assert_se(streq(setting1, x1000("ABCD")));
break;
case 8 ... 9:
case 10 ... 11:
assert_se(r == 0);
assert_se(streq(setting1, x1000("ABCD") " foobar"));
break;
case 10 ... 11:
case 12 ... 13:
assert_se(r == -ENOBUFS);
assert_se(setting1 == NULL);
break;