Fix RunGrepTest's handling of binary zeros on Solaris by using /usr/xpg4/bin/tr

instead of tr if /usr/xpg4/bin/tr exists.
This commit is contained in:
ph10 2021-02-07 16:43:00 +00:00
parent afb4fc7a01
commit 35e257f294
2 changed files with 20 additions and 8 deletions

View File

@ -7,7 +7,10 @@ Version 10.37-RC1 04-January-2021
1. Change RunGrepTest to use tr instead of sed when testing with binary 1. Change RunGrepTest to use tr instead of sed when testing with binary
zero bytes, because sed varies a lot from system to system and has problems zero bytes, because sed varies a lot from system to system and has problems
with binary zeros. This is from Bugzilla #2681. Patch from Jeremie with binary zeros. This is from Bugzilla #2681. Patch from Jeremie
Courreges-Anglas via Nam Nguyen. This fixes RunGrepTest for OpenBSD. Courreges-Anglas via Nam Nguyen. This fixes RunGrepTest for OpenBSD. Later:
it broke it for at least one version of Solaris, where tr can't handle binary
zeros. However, that system had /usr/xpg4/bin/tr installed, which works OK, so
RunGrepTest now checks for that command and use it if found.
2. Compiling with gcc 10.2's -fanalyzer option showed up a hypothetical problem 2. Compiling with gcc 10.2's -fanalyzer option showed up a hypothetical problem
with a NULL dereference. I don't think this case could ever occur in practice, with a NULL dereference. I don't think this case could ever occur in practice,

View File

@ -755,16 +755,25 @@ $valgrind $vjs $pcre2grep -n --newline=any "^(abc|def|ghi|jkl)" testNinputgrep >
printf '%c--------------------------- Test N6 ------------------------------\r\n' - >>testtrygrep printf '%c--------------------------- Test N6 ------------------------------\r\n' - >>testtrygrep
$valgrind $vjs $pcre2grep -n --newline=anycrlf "^(abc|def|ghi|jkl)" testNinputgrep >>testtrygrep $valgrind $vjs $pcre2grep -n --newline=anycrlf "^(abc|def|ghi|jkl)" testNinputgrep >>testtrygrep
# It seems impossible to handle NUL characters easily in many operating # This next test involves NUL characters. It seems impossible to handle them
# systems, including Solaris (aka SunOS), where the version of sed explicitly # easily in many operating systems. An earlier version of this script used sed
# doesn't like them, and also MacOS (Darwin), OpenBSD, FreeBSD, NetBSD, and # to translate NUL into the string ZERO, but this didn't work on Solaris (aka
# some Linux distributions like Alpine, even when using GNU sed, so test for # SunOS), where the version of sed explicitly doesn't like them, and also MacOS
# a usable sed and fudge the output so that the comparison works when sed # (Darwin), OpenBSD, FreeBSD, NetBSD, and some Linux distributions like Alpine,
# doesn't. # even when using GNU sed. A user suggested using tr instead, which
# necessitates translating to a single character (@). However, on (some
# versions of?) Solaris, the normal "tr" cannot handle binary zeros, but if
# /usr/xpg4/bin/tr is available, it can do so, so test for that.
if [ -x /usr/xpg4/bin/tr ] ; then
tr=/usr/xpg4/bin/tr
else
tr=tr
fi
printf '%c--------------------------- Test N7 ------------------------------\r\n' - >>testtrygrep printf '%c--------------------------- Test N7 ------------------------------\r\n' - >>testtrygrep
printf 'abc\0def' >testNinputgrep printf 'abc\0def' >testNinputgrep
$valgrind $vjs $pcre2grep -na --newline=nul "^(abc|def)" testNinputgrep | tr '\000' '@' >>testtrygrep $valgrind $vjs $pcre2grep -na --newline=nul "^(abc|def)" testNinputgrep | $tr '\000' '@' >>testtrygrep
echo "" >>testtrygrep echo "" >>testtrygrep
$cf $srcdir/testdata/grepoutputN testtrygrep $cf $srcdir/testdata/grepoutputN testtrygrep