diff --git a/src/udev/udev-rules.c b/src/udev/udev-rules.c index 42f6fde8a0..88f633138e 100644 --- a/src/udev/udev-rules.c +++ b/src/udev/udev-rules.c @@ -2482,14 +2482,14 @@ static int udev_rule_apply_token_to_event( /* Drop the last line. */ bool found = false; - for (char *p = PTR_SUB1(buf + strlen(buf), buf); p; p = PTR_SUB1(p, buf)) + for (char *p = PTR_SUB1(result + strlen(result), result); p; p = PTR_SUB1(p, result)) if (strchr(NEWLINE, *p)) { *p = '\0'; found = true; break; } if (!found) - buf[0] = '\0'; + result[0] = '\0'; } r = strv_split_newlines_full(&lines, result, EXTRACT_RETAIN_ESCAPE); diff --git a/test/units/TEST-17-UDEV.IMPORT.sh b/test/units/TEST-17-UDEV.IMPORT.sh index f09b171066..f2f9a4100e 100755 --- a/test/units/TEST-17-UDEV.IMPORT.sh +++ b/test/units/TEST-17-UDEV.IMPORT.sh @@ -17,6 +17,17 @@ test -f /run/udev/data/c1:3 udevadm info /dev/null | grep 'E: HOGE=aa\\x20\\x20\\x20bb' >/dev/null udevadm info /dev/null | grep 'E: FOO=\\x20aaa\\x20' >/dev/null +cat >/run/udev/rules.d/50-testsuite.rules <<'EOF' +SUBSYSTEM=="mem", KERNEL=="null", OPTIONS="log_level=debug" +ACTION=="add", SUBSYSTEM=="mem", KERNEL=="null", IMPORT{program}="/bin/sh -c 'printf \"TRUNCATED_OK=yes\nTRUNCATED_BAD=\"; i=0; while [ \"$i\" -lt 20000 ]; do printf A; i=$((i + 1)); done'" +EOF + +udevadm control --reload +SYSTEMD_LOG_LEVEL=debug udevadm trigger --verbose --settle --action add /dev/null + +udevadm info /dev/null | grep 'E: TRUNCATED_OK=yes' >/dev/null +(! udevadm info /dev/null | grep 'E: TRUNCATED_BAD=' >/dev/null) + rm /run/udev/rules.d/50-testsuite.rules udevadm control --reload