diff options
author | Diego Biurrun <diego@biurrun.de> | 2011-07-15 01:06:16 +0200 |
---|---|---|
committer | Diego Biurrun <diego@biurrun.de> | 2011-07-16 00:28:07 +0200 |
commit | f20418c3491b745b0f82e6eb1a7debae4cfff126 (patch) | |
tree | 5f5997e2c4311bd330afe57fed95b3c89ccceca6 /libavcodec/vaapi_mpeg2.c | |
parent | 86e8272a235ac233bf7dbad86bab2c45720d65ca (diff) | |
download | ffmpeg-f20418c3491b745b0f82e6eb1a7debae4cfff126.tar.gz |
vaapi: do not assert on value read from input bitstream
User-provided data should never trigger an assert; return error instead.
Also fix an instance of get_bits where get_bits_long should have been used.
This eliminates the following warning:
libavcodec/vaapi_mpeg2.c:112:14: warning: variable 'start_code' set but not used
Diffstat (limited to 'libavcodec/vaapi_mpeg2.c')
-rw-r--r-- | libavcodec/vaapi_mpeg2.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/libavcodec/vaapi_mpeg2.c b/libavcodec/vaapi_mpeg2.c index 561f4bf800..b608246cb9 100644 --- a/libavcodec/vaapi_mpeg2.c +++ b/libavcodec/vaapi_mpeg2.c @@ -109,14 +109,14 @@ static int vaapi_mpeg2_decode_slice(AVCodecContext *avctx, const uint8_t *buffer MpegEncContext * const s = avctx->priv_data; VASliceParameterBufferMPEG2 *slice_param; GetBitContext gb; - uint32_t start_code, quantiser_scale_code, intra_slice_flag, macroblock_offset; + uint32_t quantiser_scale_code, intra_slice_flag, macroblock_offset; av_dlog(avctx, "vaapi_mpeg2_decode_slice(): buffer %p, size %d\n", buffer, size); /* Determine macroblock_offset */ init_get_bits(&gb, buffer, 8 * size); - start_code = get_bits(&gb, 32); - assert((start_code & 0xffffff00) == 0x00000100); + if (get_bits_long(&gb, 32) >> 8 != 1) /* start code */ + return AVERROR_INVALIDDATA; quantiser_scale_code = get_bits(&gb, 5); intra_slice_flag = get_bits1(&gb); if (intra_slice_flag) { |