When IMPORT{program} output was truncated, the code intended to drop
the last incomplete result line before importing properties.
It edited the command buffer instead of the output buffer, so the
incomplete line could still be parsed and imported.
Trim the result buffer and cover the behavior with the existing IMPORT
test.
Follow-up for 6b6e471a32.
Reproducer:
Configure an IMPORT{program} rule whose output exceeds UDEV_LINE_SIZE
and ends with an incomplete property line, for example:
TRUNCATED_OK=yes
TRUNCATED_BAD=<very long value without terminating newline>
Only TRUNCATED_OK should be imported. Before this fix, the truncation
handler edited the command buffer instead of the output buffer, so
TRUNCATED_BAD could still be parsed from the truncated result.
35 lines
1.2 KiB
Bash
Executable File
35 lines
1.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# SPDX-License-Identifier: LGPL-2.1-or-later
|
|
set -ex
|
|
set -o pipefail
|
|
|
|
mkdir -p /run/udev/rules.d/
|
|
|
|
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}="/usr/bin/echo -e HOGE=aa\\\\x20\\\\x20\\\\x20bb\nFOO=\\\\x20aaa\\\\x20\n\n\n"
|
|
EOF
|
|
|
|
udevadm control --reload
|
|
SYSTEMD_LOG_LEVEL=debug udevadm trigger --verbose --settle --action add /dev/null
|
|
|
|
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
|
|
|
|
exit 0
|