From 874616addcc7eafe407fb57fe4354721e5901d4b Mon Sep 17 00:00:00 2001 From: Bryan Drewery Date: Wed, 9 Nov 2022 11:31:09 -0800 Subject: mapfile sh compat: Fix handling of escapes --- src/share/poudriere/include/util.sh | 2 +- test/mapfile.sh | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/share/poudriere/include/util.sh b/src/share/poudriere/include/util.sh index 657c5a65..a4fc4d34 100644 --- a/src/share/poudriere/include/util.sh +++ b/src/share/poudriere/include/util.sh @@ -699,7 +699,7 @@ mapfile_read() { fi hash_get mapfile_fd "${handle}" fd || fd=8 - read_blocking "$@" <&${fd} + read_blocking -r "$@" <&${fd} } mapfile_write() { diff --git a/test/mapfile.sh b/test/mapfile.sh index 81054f1a..0d96c6ce 100644 --- a/test/mapfile.sh +++ b/test/mapfile.sh @@ -208,6 +208,20 @@ if mapfile_builtin; then } fi +# Test \ handling +{ + TMP=$(mktemp -t mapfile) + + expected='\blah\\b\\\\lah' + echo "${expected}" >> "${TMP}" + assert_ret 0 mapfile handle "${TMP}" "re" + unset line + assert_ret 0 mapfile_read "${handle}" line + assert_ret 0 mapfile_close "${handle}" + assert "${expected}" "${line}" "line with backslashes should match" + rm -f "${TMP}" +} + # Should only return full lines as read(1) does { rm -f "${TMP}" -- cgit v1.2.3