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
This commit is contained in:
parent
86e8272a23
commit
f20418c349
@ -109,14 +109,14 @@ static int vaapi_mpeg2_decode_slice(AVCodecContext *avctx, const uint8_t *buffer
|
|||||||
MpegEncContext * const s = avctx->priv_data;
|
MpegEncContext * const s = avctx->priv_data;
|
||||||
VASliceParameterBufferMPEG2 *slice_param;
|
VASliceParameterBufferMPEG2 *slice_param;
|
||||||
GetBitContext gb;
|
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);
|
av_dlog(avctx, "vaapi_mpeg2_decode_slice(): buffer %p, size %d\n", buffer, size);
|
||||||
|
|
||||||
/* Determine macroblock_offset */
|
/* Determine macroblock_offset */
|
||||||
init_get_bits(&gb, buffer, 8 * size);
|
init_get_bits(&gb, buffer, 8 * size);
|
||||||
start_code = get_bits(&gb, 32);
|
if (get_bits_long(&gb, 32) >> 8 != 1) /* start code */
|
||||||
assert((start_code & 0xffffff00) == 0x00000100);
|
return AVERROR_INVALIDDATA;
|
||||||
quantiser_scale_code = get_bits(&gb, 5);
|
quantiser_scale_code = get_bits(&gb, 5);
|
||||||
intra_slice_flag = get_bits1(&gb);
|
intra_slice_flag = get_bits1(&gb);
|
||||||
if (intra_slice_flag) {
|
if (intra_slice_flag) {
|
||||||
|
Loading…
Reference in New Issue
Block a user