From b4958f42af08a72cf02e845c8db8d60fe2e5a82f Mon Sep 17 00:00:00 2001 From: Ronny Chevalier Date: Sun, 14 May 2017 13:19:11 +0200 Subject: [PATCH 1/2] conf-parser: fix wrong argument given to log_syntax_invalid_utf8 The condition is on "word", hence we give word instead of rvalue. An assert would be triggered if !utf8_is_valid(word) is true and rvalue == NULL, since log_syntax_invalid_utf8 calls utf8_escape_invalid which calls assert(str). A test case has been added to test with valid and invalid utf8. --- src/shared/conf-parser.c | 2 +- src/test/test-conf-parser.c | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/shared/conf-parser.c b/src/shared/conf-parser.c index dae521ef9f..44df7493e2 100644 --- a/src/shared/conf-parser.c +++ b/src/shared/conf-parser.c @@ -793,7 +793,7 @@ int config_parse_strv(const char *unit, } if (!utf8_is_valid(word)) { - log_syntax_invalid_utf8(unit, LOG_ERR, filename, line, rvalue); + log_syntax_invalid_utf8(unit, LOG_ERR, filename, line, word); free(word); continue; } diff --git a/src/test/test-conf-parser.c b/src/test/test-conf-parser.c index be5d2611f8..26ff27035b 100644 --- a/src/test/test-conf-parser.c +++ b/src/test/test-conf-parser.c @@ -180,6 +180,8 @@ static void test_config_parse_strv(void) { test_config_parse_strv_one("foo", STRV_MAKE("foo")); test_config_parse_strv_one("foo bar foo", STRV_MAKE("foo", "bar", "foo")); test_config_parse_strv_one("\"foo bar\" foo", STRV_MAKE("foo bar", "foo")); + test_config_parse_strv_one("\xc3\x80", STRV_MAKE("\xc3\x80")); + test_config_parse_strv_one("\xc3\x7f", STRV_MAKE_EMPTY); } static void test_config_parse_mode(void) { From d5ade2d6027c67ef5a16d4a0e38c9fa38fd68212 Mon Sep 17 00:00:00 2001 From: Ronny Chevalier Date: Sun, 14 May 2017 13:19:11 +0200 Subject: [PATCH 2/2] test-conf-parser: add valid and invalid utf8 test for config_parse_path --- src/test/test-conf-parser.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/test/test-conf-parser.c b/src/test/test-conf-parser.c index 26ff27035b..77fcbc0dd3 100644 --- a/src/test/test-conf-parser.c +++ b/src/test/test-conf-parser.c @@ -109,8 +109,10 @@ static void test_config_parse_path(void) { test_config_parse_path_one("/path", "/path"); test_config_parse_path_one("/path//////////", "/path"); test_config_parse_path_one("///path/foo///bar////bar//", "/path/foo/bar/bar"); + test_config_parse_path_one("/path/\xc3\x80", "/path/\xc3\x80"); test_config_parse_path_one("not_absolute/path", NULL); + test_config_parse_path_one("/path/\xc3\x7f", NULL); } static void test_config_parse_log_level(void) {