commit:     66f614c51f017b0693f5aaeb5897db28ef3aff6c
Author:     Manoj Gupta <manojgupta <AT> google <DOT> com>
AuthorDate: Fri Aug 24 17:43:58 2018 +0000
Commit:     Thomas Deutschmann <whissi <AT> gentoo <DOT> org>
CommitDate: Fri Aug 24 17:47:29 2018 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=66f614c5

app-arch/bzip2: fix an error reported by ubsan

Use unsigned 1 for shifting instead of signed 1.

Fix an issue with shift caught by undefined behavior
sanitizer in clang.
bzip2-1.0.6/blocksort.c:255:7
runtime error: left shift of 1 by 31 places cannot be represented
in type 'int'.

Closes: https://github.com/gentoo/gentoo/pull/9688
Signed-off-by: Thomas Deutschmann <whissi <AT> gentoo.org>

 ...zip2-1.0.6-r9.ebuild => bzip2-1.0.6-r10.ebuild} |  1 +
 app-arch/bzip2/files/bzip2-1.0.6-ubsan-error.patch | 24 ++++++++++++++++++++++
 2 files changed, 25 insertions(+)

diff --git a/app-arch/bzip2/bzip2-1.0.6-r9.ebuild 
b/app-arch/bzip2/bzip2-1.0.6-r10.ebuild
similarity index 98%
rename from app-arch/bzip2/bzip2-1.0.6-r9.ebuild
rename to app-arch/bzip2/bzip2-1.0.6-r10.ebuild
index b2bae1f0989..5fb91d277fa 100644
--- a/app-arch/bzip2/bzip2-1.0.6-r9.ebuild
+++ b/app-arch/bzip2/bzip2-1.0.6-r10.ebuild
@@ -27,6 +27,7 @@ PATCHES=(
        "${FILESDIR}"/${PN}-1.0.6-mingw.patch #393573
        "${FILESDIR}"/${PN}-1.0.6-out-of-tree-build.patch
        "${FILESDIR}"/${PN}-1.0.6-CVE-2016-3189.patch #620466
+       "${FILESDIR}"/${PN}-1.0.6-ubsan-error.patch
 )
 
 DOCS=( CHANGES README{,.COMPILATION.PROBLEMS,.XML.STUFF} manual.pdf )

diff --git a/app-arch/bzip2/files/bzip2-1.0.6-ubsan-error.patch 
b/app-arch/bzip2/files/bzip2-1.0.6-ubsan-error.patch
new file mode 100644
index 00000000000..84b811177ed
--- /dev/null
+++ b/app-arch/bzip2/files/bzip2-1.0.6-ubsan-error.patch
@@ -0,0 +1,24 @@
+Author: Manoj Gupta <[email protected]>
+
+Use unsigned 1 for shifting instead of signed 1.
+
+This fixed an issue with shift caught by undefined behavior
+sanitizer in clang.
+bzip2-1.0.6/blocksort.c:255:7
+runtime error: left shift of 1 by 31 places cannot be represented in type 'int'
+
+--- a/blocksort.c
++++ b/blocksort.c
+@@ -202,9 +202,9 @@ void fallbackQSort3 ( UInt32* fmap,
+       bhtab [ 0 .. 2+(nblock/32) ] destroyed
+ */
+ 
+-#define       SET_BH(zz)  bhtab[(zz) >> 5] |= (1 << ((zz) & 31))
+-#define     CLEAR_BH(zz)  bhtab[(zz) >> 5] &= ~(1 << ((zz) & 31))
+-#define     ISSET_BH(zz)  (bhtab[(zz) >> 5] & (1 << ((zz) & 31)))
++#define       SET_BH(zz)  bhtab[(zz) >> 5] |= (1u << ((zz) & 31))
++#define     CLEAR_BH(zz)  bhtab[(zz) >> 5] &= ~(1u << ((zz) & 31))
++#define     ISSET_BH(zz)  (bhtab[(zz) >> 5] & (1u << ((zz) & 31)))
+ #define      WORD_BH(zz)  bhtab[(zz) >> 5]
+ #define UNALIGNED_BH(zz)  ((zz) & 0x01f)
+ 

Reply via email to