Go to:
Gentoo Home
Documentation
Forums
Lists
Bugs
Planet
Store
Wiki
Get Gentoo!
Gentoo's Bugzilla – Attachment 244315 Details for
Bug 309001
GNOME tarballs with 99+ char filenames cause troubles with app-arch/tar-1.21+ when piped into
Home
|
New
–
[Ex]
|
Browse
|
Search
|
Privacy Policy
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
handle SIGPIPE from decompressor
portage-sigpipe.patch (text/plain), 2.31 KB, created by
Zac Medico
on 2010-08-24 00:27:58 UTC
(
hide
)
Description:
handle SIGPIPE from decompressor
Filename:
MIME Type:
Creator:
Zac Medico
Created:
2010-08-24 00:27:58 UTC
Size:
2.31 KB
patch
obsolete
>From 0b33a9b2b033c8e9d95bed97f2f740fbf99925e7 Mon Sep 17 00:00:00 2001 >From: Zac Medico <zmedico@gentoo.org> >Date: Mon, 23 Aug 2010 17:22:55 -0700 >Subject: [PATCH] Handle SIGPIPE when unpack() extracts tar files through a pipe. > >When checking ${PIPESTATUS[@]} for extraction of tar files in unpack(), >use a new assert_tar_extract() function which behaves the same as the >existing assert() function except that it tolerates pipe writers being >killed by SIGPIPE. >--- > bin/ebuild.sh | 4 ++-- > bin/isolated-functions.sh | 26 ++++++++++++++++++++++++++ > 2 files changed, 28 insertions(+), 2 deletions(-) > >diff --git a/bin/ebuild.sh b/bin/ebuild.sh >index 84a83fe..d69408e 100755 >--- a/bin/ebuild.sh >+++ b/bin/ebuild.sh >@@ -348,7 +348,7 @@ unpack() { > _unpack_tar() { > if [ "${y}" == "tar" ]; then > $1 -dc "$srcdir$x" | tar xof - >- assert "$myfail" >+ assert_tar_extract "$myfail" > else > $1 -dc "${srcdir}${x}" > ${x%.*} || die "$myfail" > fi >@@ -364,7 +364,7 @@ unpack() { > ;; > tbz|tbz2) > bzip2 -dc "$srcdir$x" | tar xof - >- assert "$myfail" >+ assert_tar_extract "$myfail" > ;; > ZIP|zip|jar) > unzip -qo "${srcdir}${x}" || die "$myfail" >diff --git a/bin/isolated-functions.sh b/bin/isolated-functions.sh >index 53312db..1b17cbb 100644 >--- a/bin/isolated-functions.sh >+++ b/bin/isolated-functions.sh >@@ -15,6 +15,32 @@ assert() { > done > } > >+assert_tar_extract() { >+ # When extracting a tar file like this: >+ # >+ # bzip2 -dc foo.tar.bz2 | tar xof - >+ # >+ # For some tar files (see bug #309001), tar will >+ # close its stdin pipe when the decompressor still has >+ # remaining data to be written to its stdout pipe. This >+ # causes the decompressor to be killed by SIGPIPE. In >+ # this case, we want to ignore pipe writers killed by >+ # SIGPIPE, and trust the exit status of tar. We refer >+ # to the bash manual section "3.7.5 Exit Status" >+ # which says, "When a command terminates on a fatal >+ # signal whose number is N, Bash uses the value 128+N >+ # as the exit status." >+ >+ local x pipestatus=${PIPESTATUS[*]} >+ for x in $pipestatus ; do >+ # Allow SIGPIPE through (128 + 13) >+ [[ $x -ne 0 && $x -ne 141 ]] && die "$@" >+ done >+ >+ # Require normal success for the last process (tar). >+ [[ $x -eq 0 ]] || die "$@" >+} >+ > shopt -s extdebug > > # dump_trace([number of funcs on stack to skip], >-- >1.7.1.1 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 309001
:
223165
|
223167
|
223235
|
223303
|
244307
| 244315