]> git.ipfire.org Git - thirdparty/xz.git/commitdiff
Fix exit status of xzgrep when grepping binary files.
authorLasse Collin <lasse.collin@tukaani.org>
Wed, 22 Feb 2012 12:02:34 +0000 (14:02 +0200)
committerLasse Collin <lasse.collin@tukaani.org>
Thu, 24 May 2012 15:52:48 +0000 (18:52 +0300)
When grepping binary files, grep may exit before it has
read all the input. In this case, gzip -q returns 2 (eating
SIGPIPE), but xz and bzip2 show SIGPIPE as the exit status
(e.g. 141). This causes wrong exit status when grepping
xz- or bzip2-compressed binary files.

The fix checks for the special exit status that indicates SIGPIPE.
It uses kill -l which should be supported everywhere since it
is in both SUSv2 (1997) and POSIX.1-2008.

Thanks to James Buren for the bug report.

src/scripts/xzgrep.in

index ae30725c69fdda5182d04d4a58b077e46d809848..515b516a1e9b9066f4928cd343aa42c2c083cb01 100644 (file)
@@ -194,7 +194,8 @@ for i; do
     fi >&3 5>&-
   )
   r=$?
-  test "$xz_status" -eq 0 || test "$xz_status" -eq 2 || r=2
+  test "$xz_status" -eq 0 || test "$xz_status" -eq 2 \
+      || test "$(kill -l "$xz_status" 2> /dev/null)" = "PIPE" || r=2
   test $res -lt $r && res=$r
 done
 exit $res