diff --git a/opus-Fix-celt-decoder-assertion-when-using-OPUS_CUSTOM.patch b/opus-Fix-celt-decoder-assertion-when-using-OPUS_CUSTOM.patch new file mode 100644 index 0000000..81dbc71 --- /dev/null +++ b/opus-Fix-celt-decoder-assertion-when-using-OPUS_CUSTOM.patch @@ -0,0 +1,41 @@ +From 06a651547f4a197c29b6abc23b530833855ee358 Mon Sep 17 00:00:00 2001 +From: Niclas Olmenius +Date: Wed, 19 Feb 2020 13:58:35 +0100 +Subject: [PATCH] Fix celt decoder assertion when using OPUS_CUSTOM + +When using OPUS_CUSTOM, `CELTDecoder->end` can be larger than 21. +Assert against 25 instead in OPUS_CUSTOM builds. + +Signed-off-by: Jean-Marc Valin +--- + celt/celt_decoder.c | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +diff --git a/celt/celt_decoder.c b/celt/celt_decoder.c +index e6efce93..74ca3b74 100644 +--- a/celt/celt_decoder.c ++++ b/celt/celt_decoder.c +@@ -117,13 +117,19 @@ void validate_celt_decoder(CELTDecoder *st) + #ifndef CUSTOM_MODES + celt_assert(st->mode == opus_custom_mode_create(48000, 960, NULL)); + celt_assert(st->overlap == 120); ++ celt_assert(st->end <= 21); ++#else ++/* From Section 4.3 in the spec: "The normal CELT layer uses 21 of those bands, ++ though Opus Custom (see Section 6.2) may use a different number of bands" ++ ++ Check if it's within the maximum number of Bark frequency bands instead */ ++ celt_assert(st->end <= 25); + #endif + celt_assert(st->channels == 1 || st->channels == 2); + celt_assert(st->stream_channels == 1 || st->stream_channels == 2); + celt_assert(st->downsample > 0); + celt_assert(st->start == 0 || st->start == 17); + celt_assert(st->start < st->end); +- celt_assert(st->end <= 21); + #ifdef OPUS_ARCHMASK + celt_assert(st->arch >= 0); + celt_assert(st->arch <= OPUS_ARCHMASK); +-- +2.26.0 + diff --git a/opus.changes b/opus.changes index ad95055..bca62b1 100644 --- a/opus.changes +++ b/opus.changes @@ -1,3 +1,11 @@ +------------------------------------------------------------------- +Wed Apr 15 17:38:39 UTC 2020 - Gustavo Pichorim Boiko + +- Backport of an upstream fix for celt decoder: + * opus-Fix-celt-decoder-assertion-when-using-OPUS_CUSTOM.patch: When + using OPUS_CUSTOM, `CELTDecoder->end` can be larger than 21. + Assert against 25 instead in OPUS_CUSTOM builds. + ------------------------------------------------------------------- Thu Aug 15 17:37:36 UTC 2019 - Bjørn Lie diff --git a/opus.spec b/opus.spec index 426880b..54d102e 100644 --- a/opus.spec +++ b/opus.spec @@ -1,7 +1,7 @@ # # spec file for package opus # -# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2020 SUSE LLC # Copyright (c) 2012 Pascal Bleser # # All modifications and additions to the file contributed by third parties @@ -31,6 +31,8 @@ Source99: baselibs.conf Patch0: opus-Silk-CNG-adapts-faster.patch # PATCH-FIX-UPSTREAM opus-Silk-fix-arm-optimization.patch -- Avoid processing LPC coeffs beyond the given order in NEON optimizations Patch1: opus-Silk-fix-arm-optimization.patch +# PATCH-FIX-UPSTREAM opus-Fix-celt-decoder-assertion-when-using-OPUS_CUSTOM.patch -- Fix celt decoder assertion when using OPUS_CUSTOM +Patch2: opus-Fix-celt-decoder-assertion-when-using-OPUS_CUSTOM.patch BuildRequires: pkgconfig %description @@ -61,6 +63,7 @@ technology from Skype's SILK codec and Xiph.Org's CELT codec. %setup -q %patch0 -p1 %patch1 -p1 +%patch2 -p1 %build %configure \