[FFmpeg-cvslog] takdec: stop decoding in case of unknown bps

Paul B Mahol git at videolan.org
Fri Oct 12 11:28:19 CEST 2012


ffmpeg | branch: master | Paul B Mahol <onemda at gmail.com> | Fri Oct 12 09:18:58 2012 +0000| [4dcf71aacca695fecba2c04e14d2b44bb3d8b764] | committer: Paul B Mahol

takdec: stop decoding in case of unknown bps

Signed-off-by: Paul B Mahol <onemda at gmail.com>

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

 libavcodec/takdec.c |   14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/libavcodec/takdec.c b/libavcodec/takdec.c
index d55f51a..76bde55 100644
--- a/libavcodec/takdec.c
+++ b/libavcodec/takdec.c
@@ -146,7 +146,7 @@ static const struct CParam {
     { 0x1A, 0x1800000, 0x1800000, 0x6800000, 0xC000000 },
 };
 
-static void tak_set_bps(AVCodecContext *avctx, int bps)
+static int tak_set_bps(AVCodecContext *avctx, int bps)
 {
     switch (bps) {
     case 8:
@@ -158,7 +158,12 @@ static void tak_set_bps(AVCodecContext *avctx, int bps)
     case 24:
         avctx->sample_fmt = AV_SAMPLE_FMT_S32P;
         break;
+    default:
+        av_log(avctx, AV_LOG_ERROR, "invalid/unsupported bits per sample\n");
+        return AVERROR_INVALIDDATA;
     }
+
+    return 0;
 }
 
 static int get_shift(int sample_rate)
@@ -185,6 +190,7 @@ static int get_scale(int sample_rate, int shift)
 static av_cold int tak_decode_init(AVCodecContext *avctx)
 {
     TAKDecContext *s = avctx->priv_data;
+    int ret;
 
     ff_tak_init_crc();
     ff_dsputil_init(&s->dsp, avctx);
@@ -196,7 +202,8 @@ static av_cold int tak_decode_init(AVCodecContext *avctx)
     s->uval = get_scale(avctx->sample_rate, get_shift(avctx->sample_rate));
     s->subframe_scale = get_scale(avctx->sample_rate, 1);
 
-    tak_set_bps(avctx, avctx->bits_per_coded_sample);
+    if ((ret = tak_set_bps(avctx, avctx->bits_per_coded_sample)) < 0)
+        return ret;
 
     return 0;
 }
@@ -775,7 +782,8 @@ static int tak_decode_frame(AVCodecContext *avctx, void *data,
 
     if (s->ti.bps != avctx->bits_per_raw_sample) {
         avctx->bits_per_raw_sample = s->ti.bps;
-        tak_set_bps(avctx, avctx->bits_per_raw_sample);
+        if ((ret = tak_set_bps(avctx, avctx->bits_per_raw_sample)) < 0)
+            return ret;
     }
     if (s->ti.sample_rate != avctx->sample_rate) {
         avctx->sample_rate = s->ti.sample_rate;



More information about the ffmpeg-cvslog mailing list