[FFmpeg-cvslog] avcodec/wmadec: handle run_level_decode error

Stéphane Cerveau git at videolan.org
Wed Sep 22 05:22:13 EEST 2021


ffmpeg | branch: release/4.4 | Stéphane Cerveau <scerveau at collabora.com> | Tue Aug 24 09:43:43 2021 -0400| [79c114e1b247754bface959c34421dd1dd27ff3d] | committer: James Almer

avcodec/wmadec: handle run_level_decode error

Consider data as invalid if ff_wma_run_level_decode
gets out with an error.

It avoids an unpleasant sound distorsion.

See http://trac.ffmpeg.org/ticket/9358

(cherry picked from commit f9fbe2f9a9c7d2db98a6e49504a7154f743cd804)

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=79c114e1b247754bface959c34421dd1dd27ff3d
---

 libavcodec/wmadec.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/libavcodec/wmadec.c b/libavcodec/wmadec.c
index 9c79556bb5..8710414936 100644
--- a/libavcodec/wmadec.c
+++ b/libavcodec/wmadec.c
@@ -590,15 +590,18 @@ static int wma_decode_block(WMACodecContext *s)
         if (s->channel_coded[ch]) {
             int tindex;
             WMACoef *ptr = &s->coefs1[ch][0];
+            int ret;
 
             /* special VLC tables are used for ms stereo because
              * there is potentially less energy there */
             tindex = (ch == 1 && s->ms_stereo);
             memset(ptr, 0, s->block_len * sizeof(WMACoef));
-            ff_wma_run_level_decode(s->avctx, &s->gb, &s->coef_vlc[tindex],
-                                    s->level_table[tindex], s->run_table[tindex],
-                                    0, ptr, 0, nb_coefs[ch],
-                                    s->block_len, s->frame_len_bits, coef_nb_bits);
+            ret = ff_wma_run_level_decode(s->avctx, &s->gb, &s->coef_vlc[tindex],
+                                          s->level_table[tindex], s->run_table[tindex],
+                                          0, ptr, 0, nb_coefs[ch],
+                                          s->block_len, s->frame_len_bits, coef_nb_bits);
+            if (ret < 0)
+                return ret;
         }
         if (s->version == 1 && s->avctx->channels >= 2)
             align_get_bits(&s->gb);



More information about the ffmpeg-cvslog mailing list