From 452482d95e814b96ad9c1b918110acefcc7d9357 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Mon, 6 Jan 2025 19:16:23 +0900 Subject: [PATCH] test: add test cases for parsing SYSTEMD_WANTS=/SYSTEMD_USER_WANTS= (cherry picked from commit 4c9da4dc91c6f875683a6c9fc00df19686f242cc) --- src/test/test-extract-word.c | 43 ++++++++++++ .../TEST-17-UDEV.SYSTEMD_WANTS-escape.sh | 65 +++++++++++++++++++ 2 files changed, 108 insertions(+) create mode 100755 test/units/TEST-17-UDEV.SYSTEMD_WANTS-escape.sh diff --git a/src/test/test-extract-word.c b/src/test/test-extract-word.c index 1bc4088fb4..4c18a45231 100644 --- a/src/test/test-extract-word.c +++ b/src/test/test-extract-word.c @@ -547,6 +547,49 @@ TEST(extract_first_word) { ASSERT_STREQ(t, "가너도루"); free(t); assert_se(isempty(p)); + + /* For issue #16735. */ + p = "test1@foo\\x2dbar\\x2dbaz.service test2@aaa\\x2dbbb\\x2dccc.service test3@escaped-path-like-data.service test4@/pure/path/like/data.service"; + ASSERT_OK_POSITIVE(extract_first_word(&p, &t, NULL, EXTRACT_UNQUOTE)); + ASSERT_STREQ(t, "test1@foox2dbarx2dbaz.service"); + free(t); + ASSERT_OK_POSITIVE(extract_first_word(&p, &t, NULL, EXTRACT_UNQUOTE)); + ASSERT_STREQ(t, "test2@aaax2dbbbx2dccc.service"); + free(t); + ASSERT_OK_POSITIVE(extract_first_word(&p, &t, NULL, EXTRACT_UNQUOTE)); + ASSERT_STREQ(t, "test3@escaped-path-like-data.service"); + free(t); + ASSERT_OK_POSITIVE(extract_first_word(&p, &t, NULL, EXTRACT_UNQUOTE)); + ASSERT_STREQ(t, "test4@/pure/path/like/data.service"); + free(t); + + p = "test1@foo\\x2dbar\\x2dbaz.service test2@aaa\\x2dbbb\\x2dccc.service test3@escaped-path-like-data.service test4@/pure/path/like/data.service"; + ASSERT_OK_POSITIVE(extract_first_word(&p, &t, NULL, EXTRACT_UNQUOTE | EXTRACT_RETAIN_ESCAPE)); + ASSERT_STREQ(t, "test1@foo\\x2dbar\\x2dbaz.service"); + free(t); + ASSERT_OK_POSITIVE(extract_first_word(&p, &t, NULL, EXTRACT_UNQUOTE | EXTRACT_RETAIN_ESCAPE)); + ASSERT_STREQ(t, "test2@aaa\\x2dbbb\\x2dccc.service"); + free(t); + ASSERT_OK_POSITIVE(extract_first_word(&p, &t, NULL, EXTRACT_UNQUOTE | EXTRACT_RETAIN_ESCAPE)); + ASSERT_STREQ(t, "test3@escaped-path-like-data.service"); + free(t); + ASSERT_OK_POSITIVE(extract_first_word(&p, &t, NULL, EXTRACT_UNQUOTE | EXTRACT_RETAIN_ESCAPE)); + ASSERT_STREQ(t, "test4@/pure/path/like/data.service"); + free(t); + + p = "test1@foo\\x2dbar\\x2dbaz.service test2@aaa\\x2dbbb\\x2dccc.service test3@escaped-path-like-data.service test4@/pure/path/like/data.service"; + ASSERT_OK_POSITIVE(extract_first_word(&p, &t, NULL, EXTRACT_UNQUOTE | EXTRACT_CUNESCAPE)); + ASSERT_STREQ(t, "test1@foo-bar-baz.service"); + free(t); + ASSERT_OK_POSITIVE(extract_first_word(&p, &t, NULL, EXTRACT_UNQUOTE | EXTRACT_CUNESCAPE)); + ASSERT_STREQ(t, "test2@aaa-bbb-ccc.service"); + free(t); + ASSERT_OK_POSITIVE(extract_first_word(&p, &t, NULL, EXTRACT_UNQUOTE | EXTRACT_CUNESCAPE)); + ASSERT_STREQ(t, "test3@escaped-path-like-data.service"); + free(t); + ASSERT_OK_POSITIVE(extract_first_word(&p, &t, NULL, EXTRACT_UNQUOTE | EXTRACT_CUNESCAPE)); + ASSERT_STREQ(t, "test4@/pure/path/like/data.service"); + free(t); } TEST(extract_first_word_and_warn) { diff --git a/test/units/TEST-17-UDEV.SYSTEMD_WANTS-escape.sh b/test/units/TEST-17-UDEV.SYSTEMD_WANTS-escape.sh new file mode 100755 index 0000000000..709161aa64 --- /dev/null +++ b/test/units/TEST-17-UDEV.SYSTEMD_WANTS-escape.sh @@ -0,0 +1,65 @@ +#!/usr/bin/env bash +# SPDX-License-Identifier: LGPL-2.1-or-later +# shellcheck disable=SC2317 +set -ex +set -o pipefail + +# shellcheck source=test/units/util.sh +. "$(dirname "$0")"/util.sh + +# This is a test case for #16735. + +IFNAME=test-netif-foo + +at_exit() { + set +e + + rm -f /tmp/output-i /tmp/output-I + + rm -rf /run/udev/rules.d/ + udevadm control --reload + + rm -f /run/systemd/system/test@.service + systemctl daemon-reload + + ip link del "$IFNAME" +} + +trap at_exit EXIT + +udevadm settle --timeout 30 + +mkdir -p /run/systemd/system/ +cat >/run/systemd/system/test@.service </tmp/output-i; echo "I=/%I" >/tmp/output-I' +RemainAfterExit=yes +EOF + +systemctl daemon-reload + +mkdir -p /run/udev/rules.d/ +cat >/run/udev/rules.d/99-testsuite.rules <