From: licunlong Date: Mon, 19 Jun 2023 13:56:33 +0000 (+0800) Subject: basic/env-file: also change to state PRE_KEY if we see NEWLINE in state COMMENT_ESCAPE X-Git-Tag: v254-rc1~157^2~1 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=cd93ec5ed2e9eaa1dfdf06e5910d46488f7dcda2;p=thirdparty%2Fsystemd.git basic/env-file: also change to state PRE_KEY if we see NEWLINE in state COMMENT_ESCAPE When we see a "\" in COMMENT state, we change the state to COMMENT_ESCAPE. When we got a new character, we reset the state to COMMENT, but this character is not dispatched. Usually the character is NEWLINE, if so we will stay in COMMENT state until we find the next NEWLINE. fix: https://github.com/systemd/systemd/issues/27975 --- diff --git a/src/basic/env-file.c b/src/basic/env-file.c index 58d7b3ec359..eb5e6404949 100644 --- a/src/basic/env-file.c +++ b/src/basic/env-file.c @@ -243,7 +243,13 @@ static int parse_env_file_internal( break; case COMMENT_ESCAPE: - state = COMMENT; + log_debug("The line which doesn't begin with \";\" or \"#\", but follows a comment" \ + " line trailing with escape is now treated as a non comment line since v254."); + if (strchr(NEWLINE, c)) { + state = PRE_KEY; + line++; + } else + state = COMMENT; break; } } diff --git a/src/test/test-env-file.c b/src/test/test-env-file.c index c8ec0e2278a..49f108945b1 100644 --- a/src/test/test-env-file.c +++ b/src/test/test-env-file.c @@ -31,9 +31,10 @@ #define env_file_3 \ "#SPAMD_ARGS=\"-d --socketpath=/var/lib/bulwark/spamd \\\n" \ "#--nouser-config \\\n" \ - "normal=line \\\n" \ + "normal1=line\\\n" \ + "111\n" \ ";normal=ignored \\\n" \ - "normal_ignored \\\n" \ + "normal2=line222\n" \ "normal ignored \\\n" #define env_file_4 \ @@ -89,7 +90,9 @@ TEST(load_env_file_3) { _cleanup_strv_free_ char **data = NULL; assert_se(load_env_file(NULL, name, &data) == 0); - assert_se(data == NULL); + assert_se(streq(data[0], "normal1=line111")); + assert_se(streq(data[1], "normal2=line222")); + assert_se(data[2] == NULL); } TEST(load_env_file_4) {