From 571bc4e9199a5d7c150e7d4759da9ef888c980c9 Mon Sep 17 00:00:00 2001 From: Andreas Sturmlechner Date: Sun, 17 Dec 2017 23:56:12 +0100 Subject: [PATCH] media-libs/speexdsp: Fix rare overflow causing clipping in mumble Closes: https://bugs.gentoo.org/548770 Package-Manager: Portage-2.3.19, Repoman-2.3.6 --- .../files/speexdsp-1.2_rc3-overflow.patch | 66 +++++++++++++++++++ .../speexdsp/speexdsp-1.2_rc3-r2.ebuild | 58 ++++++++++++++++ 2 files changed, 124 insertions(+) create mode 100644 media-libs/speexdsp/files/speexdsp-1.2_rc3-overflow.patch create mode 100644 media-libs/speexdsp/speexdsp-1.2_rc3-r2.ebuild diff --git a/media-libs/speexdsp/files/speexdsp-1.2_rc3-overflow.patch b/media-libs/speexdsp/files/speexdsp-1.2_rc3-overflow.patch new file mode 100644 index 000000000000..3a413625085e --- /dev/null +++ b/media-libs/speexdsp/files/speexdsp-1.2_rc3-overflow.patch @@ -0,0 +1,66 @@ +From a2133f5904ddb616b6578920bd2199f5accb484d Mon Sep 17 00:00:00 2001 +From: Tristan Matthews +Date: Fri, 24 Apr 2015 15:55:32 -0400 +Subject: [PATCH] preprocess: prevent rare overflow on overlap-add + +Reported-by: Fabian Henze +--- + libspeexdsp/arch.h | 3 +++ + libspeexdsp/preprocess.c | 2 +- + libspeexdsp/resample.c | 6 ------ + 3 files changed, 4 insertions(+), 7 deletions(-) + +diff --git a/libspeexdsp/arch.h b/libspeexdsp/arch.h +index 6b3bc5d..c2de991 100644 +--- a/libspeexdsp/arch.h ++++ b/libspeexdsp/arch.h +@@ -101,6 +101,8 @@ typedef spx_word32_t spx_sig_t; + #define SIG_SHIFT 14 + #define GAIN_SHIFT 6 + ++#define WORD2INT(x) ((x) < -32767 ? -32768 : ((x) > 32766 ? 32767 : (x))) ++ + #define VERY_SMALL 0 + #define VERY_LARGE32 ((spx_word32_t)2147483647) + #define VERY_LARGE16 ((spx_word16_t)32767) +@@ -203,6 +205,7 @@ typedef float spx_word32_t; + #define DIV32(a,b) (((spx_word32_t)(a))/(spx_word32_t)(b)) + #define PDIV32(a,b) (((spx_word32_t)(a))/(spx_word32_t)(b)) + ++#define WORD2INT(x) ((x) < -32767.5f ? -32768 : ((x) > 32766.5f ? 32767 : floor(.5+(x)))) + + #endif + +diff --git a/libspeexdsp/preprocess.c b/libspeexdsp/preprocess.c +index c080581..3053eb5 100644 +--- a/libspeexdsp/preprocess.c ++++ b/libspeexdsp/preprocess.c +@@ -980,7 +980,7 @@ EXPORT int speex_preprocess_run(SpeexPreprocessState *st, spx_int16_t *x) + + /* Perform overlap and add */ + for (i=0;ioutbuf[i] + st->frame[i]; ++ x[i] = WORD2INT(ADD32(EXTEND32(st->outbuf[i]), EXTEND32(st->frame[i]))); + for (i=0;iframe[N3+i]; + +diff --git a/libspeexdsp/resample.c b/libspeexdsp/resample.c +index 4940a64..4e47d67 100644 +--- a/libspeexdsp/resample.c ++++ b/libspeexdsp/resample.c +@@ -83,12 +83,6 @@ static void speex_free (void *ptr) {free(ptr);} + #define M_PI 3.14159265358979323846 + #endif + +-#ifdef FIXED_POINT +-#define WORD2INT(x) ((x) < -32767 ? -32768 : ((x) > 32766 ? 32767 : (x))) +-#else +-#define WORD2INT(x) ((x) < -32767.5f ? -32768 : ((x) > 32766.5f ? 32767 : floor(.5+(x)))) +-#endif +- + #define IMAX(a,b) ((a) > (b) ? (a) : (b)) + #define IMIN(a,b) ((a) < (b) ? (a) : (b)) + +-- +2.1.4 + diff --git a/media-libs/speexdsp/speexdsp-1.2_rc3-r2.ebuild b/media-libs/speexdsp/speexdsp-1.2_rc3-r2.ebuild new file mode 100644 index 000000000000..ef469e1dd724 --- /dev/null +++ b/media-libs/speexdsp/speexdsp-1.2_rc3-r2.ebuild @@ -0,0 +1,58 @@ +# Copyright 1999-2017 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +EAPI=6 +inherit autotools flag-o-matic multilib-minimal + +MY_P=${P/_} +MY_P=${MY_P/_p/.} + +DESCRIPTION="Audio compression format designed for speech -- DSP" +HOMEPAGE="https://www.speex.org/" +SRC_URI="https://downloads.xiph.org/releases/speex/${MY_P}.tar.gz" + +LICENSE="BSD" +SLOT="0" +KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~sh ~sparc ~x86 ~amd64-fbsd ~x86-fbsd ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~sparc-solaris ~x86-solaris" +IUSE="cpu_flags_x86_sse cpu_flags_x86_sse2 cpu_flags_arm_neon static-libs" + +RDEPEND="!