diff options
author | Luca Barbato <lu_zero@gentoo.org> | 2014-01-12 01:14:12 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2014-01-13 05:04:13 +0100 |
commit | aead772b5814142b0e530804486ff7970ecd9eef (patch) | |
tree | a2c66c4e1d81241ea2e965cf3feeb353564e495c /libavcodec/hevc.c | |
parent | 48a5b155433ed7af20fb0a5c20ca131958727727 (diff) | |
download | ffmpeg-aead772b5814142b0e530804486ff7970ecd9eef.tar.gz |
hevc: Bound check slice_qp
The T-REC-H.265-2013044 page 79 states they have to be into the range
[-s->sps->qp_bd_offset, 51].
Fixes: asan_stack-oob_eae8e3_9522_WP_MAIN10_B_Toshiba_3.bit
Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/hevc.c')
-rw-r--r-- | libavcodec/hevc.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/libavcodec/hevc.c b/libavcodec/hevc.c index 50e2dae396..5cdb1ed75f 100644 --- a/libavcodec/hevc.c +++ b/libavcodec/hevc.c @@ -682,7 +682,17 @@ static int hls_slice_header(HEVCContext *s) } // Inferred parameters - sh->slice_qp = 26 + s->pps->pic_init_qp_minus26 + sh->slice_qp_delta; + sh->slice_qp = 26U + s->pps->pic_init_qp_minus26 + sh->slice_qp_delta; + if (sh->slice_qp > 51 || + sh->slice_qp < -s->sps->qp_bd_offset) { + av_log(s->avctx, AV_LOG_ERROR, + "The slice_qp %d is outside the valid range " + "[%d, 51].\n", + sh->slice_qp, + -s->sps->qp_bd_offset); + return AVERROR_INVALIDDATA; + } + sh->slice_ctb_addr_rs = sh->slice_segment_addr; s->HEVClc->first_qp_group = !s->sh.dependent_slice_segment_flag; |