From 92554d19aa2cdd001f5312175a827ee14d2fecb3 Mon Sep 17 00:00:00 2001 From: "Philip.Hazel" Date: Fri, 9 Oct 2020 15:25:27 +0000 Subject: [PATCH] Fix binary zero issue (Bugzilla #2628) in RunGrepTest. --- ChangeLog | 4 ++++ RunGrepTest | 26 ++++++++++++-------------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/ChangeLog b/ChangeLog index 6ff2f9c..93b1ad6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -86,6 +86,10 @@ everywhere, which was not previously the case. At the same time, the escape sequences $x{...} and $o{...} have been introduced, to allow for characters whose code points are greater than 255 in Unicode mode. +17. Applied the patch from Bugzilla #2628 to RunGrepTest. This does an explicit +test for a version of sed that can handle binary zero, instead of assuming that +any Linux version will work. + Version 10.35 09-May-2020 --------------------------- diff --git a/RunGrepTest b/RunGrepTest index a8b80b8..abf69e7 100755 --- a/RunGrepTest +++ b/RunGrepTest @@ -757,22 +757,20 @@ $valgrind $vjs $pcre2grep -n --newline=anycrlf "^(abc|def|ghi|jkl)" testNinputgr # It seems impossible to handle NUL characters easily in many operating # systems, including Solaris (aka SunOS), where the version of sed explicitly -# doesn't like them, and also MacOS (Darwin), OpenBSD, FreeBSD, and NetBSD. So -# now we run this test only on OS that are known to work. For the rest, we -# fudge the output so that the comparison works. +# doesn't like them, and also MacOS (Darwin), OpenBSD, FreeBSD, NetBSD, and +# some Linux distributions like Alpine, even when using GNU sed, so test for +# a usable sed and fudge the output so that the comparison works when sed +# doesn't. printf '%c--------------------------- Test N7 ------------------------------\r\n' - >>testtrygrep -uname=`uname` -case $uname in - Linux) - printf 'abc\0def' >testNinputgrep - $valgrind $vjs $pcre2grep -na --newline=nul "^(abc|def)" testNinputgrep | sed 's/\x00/ZERO/g' >>testtrygrep - echo "" >>testtrygrep - ;; - *) - echo '1:abcZERO2:defZERO' >>testtrygrep - ;; -esac +Z=$(printf '\0' | sed 's/\x00/Z/g') +if [ "$Z" = "Z" ]; then + printf 'abc\0def' >testNinputgrep + $valgrind $vjs $pcre2grep -na --newline=nul "^(abc|def)" testNinputgrep | sed 's/\x00/ZERO/g' >>testtrygrep + echo "" >>testtrygrep +else + echo '1:abcZERO2:defZERO' >>testtrygrep +fi $cf $srcdir/testdata/grepoutputN testtrygrep if [ $? != 0 ] ; then exit 1; fi