commit:     a00cf04f5b8d1c2b284c21cf3670b0d1a1a9ac51
Author:     Lars Wendler <polynomial-c <AT> gentoo <DOT> org>
AuthorDate: Mon Dec 14 10:20:56 2015 +0000
Commit:     Lars Wendler <polynomial-c <AT> gentoo <DOT> org>
CommitDate: Mon Dec 14 10:20:56 2015 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=a00cf04f

app-arch/pbzip2: Revbump to fix possible data corruption (#567952).

Package-Manager: portage-2.2.26
Signed-off-by: Lars Wendler <polynomial-c <AT> gentoo.org>

 .../files/pbzip2-1.1.12-data_truncation_fix.patch  | 142 +++++++++++++++++++++
 app-arch/pbzip2/pbzip2-1.1.12-r1.ebuild            |  44 +++++++
 2 files changed, 186 insertions(+)

diff --git a/app-arch/pbzip2/files/pbzip2-1.1.12-data_truncation_fix.patch 
b/app-arch/pbzip2/files/pbzip2-1.1.12-data_truncation_fix.patch
new file mode 100644
index 0000000..0ce62e7
--- /dev/null
+++ b/app-arch/pbzip2/files/pbzip2-1.1.12-data_truncation_fix.patch
@@ -0,0 +1,142 @@
+https://bugs.launchpad.net/pbzip2/+bug/1524909
+https://bugs.gentoo.org/567952
+
+
+=== modified file 'pbzip2.cpp'
+--- pbzip2.cpp 2014-12-21 10:20:27 +0000
++++ pbzip2.cpp 2015-12-11 00:14:31 +0000
+@@ -2083,6 +2083,17 @@
+       return 0;
+ }
+ 
++void close_streams(FILE *stream, FILE *zStream)
++{
++      if (stream != NULL)
++              fflush(stream);
++
++      if (zStream != NULL && zStream != stdin)
++              fclose(zStream);
++      if (stream != NULL && stream != stdout)
++              fclose(stream);
++}
++
+ /*
+  *********************************************************
+  */
+@@ -2125,9 +2136,7 @@
+       // check file stream for errors
+       if (ferror(zStream))
+       {
+-              if (zStream != stdin)
+-                      fclose(zStream);
+-
++              close_streams(stream, zStream);
+               handle_error(EF_EXIT, -1,
+                               "pbzip2: *ERROR: Problem with input stream of 
file [%s]!  Aborting...\n", InFilename);
+               return -1;
+@@ -2155,9 +2164,7 @@
+       // check file stream for errors
+       if (ferror(stream))
+       {
+-              if (stream != stdout)
+-                      fclose(stream);
+-              
++              close_streams(stream, zStream);
+               handle_error(EF_EXIT, -1,
+                               "pbzip2: *ERROR: Problem with output stream of 
file [%s]!  Aborting...\n", InFilename);
+               return -1;
+@@ -2169,10 +2176,7 @@
+               if (syncGetTerminateFlag() != 0)
+               {
+                       fprintf (stderr, "directdecompress: terminating1 - 
terminateFlag set\n");
+-                      if (zStream != stdin)
+-                              fclose(zStream);
+-                      if (stream != stdout)
+-                              fclose(stream);
++                      close_streams(stream, zStream);
+                       return -1;
+               }
+ 
+@@ -2180,11 +2184,8 @@
+               if (bzf == NULL || bzerr != BZ_OK)
+               {
+                       ret = testBZ2ErrorHandling(bzerr, bzf, streamNo);
+-                      if (zStream != stdin)
+-                              fclose(zStream);
+-                      if (stream != stdout)
+-                              fclose(stream);
+-                      
++                      close_streams(stream, zStream);
++      
+                       if (ret != 0)
+                       {
+                               syncSetTerminateFlag(1);
+@@ -2200,10 +2201,7 @@
+                       if (syncGetTerminateFlag() != 0)
+                       {
+                               fprintf (stderr, "directdecompress: 
terminating2 - terminateFlag set\n");
+-                              if (zStream != stdin)
+-                                      fclose(zStream);
+-                              if (stream != stdout)
+-                                      fclose(stream);
++                              close_streams(stream, zStream);
+                               return -1;
+                       }
+ 
+@@ -2225,11 +2223,8 @@
+                                               if (ferror(zStream))
+                                               {
+                                                       ret = 
testBZ2ErrorHandling(bzerr, bzf, streamNo);
+-                                                      if (zStream != stdin)
+-                                                              fclose(zStream);
+-                                                      if (stream != stdout)
+-                                                              fclose(stream);
+-                                                      
++                                                      close_streams(stream, 
zStream);
++
+                                                       if (ret != 0)
+                                                       {
+                                                               
syncSetTerminateFlag(1);
+@@ -2242,11 +2237,8 @@
+                                               if (ferror(stream))
+                                               {
+                                                       ret = 
testBZ2ErrorHandling(bzerr, bzf, streamNo);
+-                                                      if (zStream != stdin)
+-                                                              fclose(zStream);
+-                                                      if (stream != stdout)
+-                                                              fclose(stream);
+-                                                      
++                                                      close_streams(stream, 
zStream);
++
+                                                       if (ret != 0)
+                                                       {
+                                                               
syncSetTerminateFlag(1);
+@@ -2263,11 +2255,8 @@
+                       if (ferror(stream))
+                       {
+                               ret = testBZ2ErrorHandling(bzerr, bzf, 
streamNo);
+-                              if (zStream != stdin)
+-                                      fclose(zStream);
+-                              if (stream != stdout)
+-                                      fclose(stream);
+-                              
++                              close_streams(stream, zStream);
++
+                               if (ret != 0)
+                               {
+                                       syncSetTerminateFlag(1);
+@@ -2278,11 +2267,8 @@
+               if (bzerr != BZ_STREAM_END)
+               {
+                       ret = testBZ2ErrorHandling(bzerr, bzf, streamNo);
+-                      if (zStream != stdin)
+-                              fclose(zStream);
+-                      if (stream != stdout)
+-                              fclose(stream);
+-                      
++                      close_streams(stream, zStream);
++
+                       if (ret != 0)
+                       {
+                               syncSetTerminateFlag(1);
+

diff --git a/app-arch/pbzip2/pbzip2-1.1.12-r1.ebuild 
b/app-arch/pbzip2/pbzip2-1.1.12-r1.ebuild
new file mode 100644
index 0000000..a878d8d
--- /dev/null
+++ b/app-arch/pbzip2/pbzip2-1.1.12-r1.ebuild
@@ -0,0 +1,44 @@
+# Copyright 1999-2015 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+EAPI=5
+
+inherit flag-o-matic eutils
+
+DESCRIPTION="Parallel bzip2 (de)compressor using libbz2"
+HOMEPAGE="http://compression.ca/pbzip2/ https://launchpad.net/pbzip2";
+SRC_URI="https://launchpad.net/pbzip2/${PV:0:3}/${PV}/+download/${P}.tar.gz";
+
+LICENSE="BZIP2"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 
~sh ~sparc ~x86 ~x86-fbsd ~amd64-linux ~x86-linux ~ppc-macos"
+IUSE="static symlink"
+
+LIB_DEPEND="app-arch/bzip2[static-libs(+)]"
+RDEPEND="
+       !static? ( ${LIB_DEPEND//\[static-libs(+)]} )
+       symlink? ( !app-arch/lbzip2[symlink] )"
+DEPEND="${RDEPEND}
+       static? ( ${LIB_DEPEND} )"
+
+src_prepare() {
+       epatch "${FILESDIR}"/${PN}-1.1.10-makefile.patch \
+               "${FILESDIR}"/${P}-data_truncation_fix.patch
+       tc-export CXX
+       use static && append-ldflags -static
+}
+
+src_install() {
+       dobin pbzip2
+       dodoc AUTHORS ChangeLog README
+       doman pbzip2.1
+       dosym pbzip2 /usr/bin/pbunzip2
+
+       if use symlink ; then
+               local s
+               for s in bzip2 bunzip2 bzcat ; do
+                       dosym pbzip2 /usr/bin/${s}
+               done
+       fi
+}

Reply via email to