From 4ced5d7780fea2ea49444d6686d26f26b3a2160f Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Mon, 6 Jan 2014 02:51:20 +0100 Subject: [PATCH] avcodec/hevc: Fix modulo operations Fixes qp fields becoming out of range Fixes: asan_static-oob_e393a3_6998_WPP_A_ericsson_MAIN10_2.bit Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind Signed-off-by: Michael Niedermayer --- libavcodec/hevc.c | 4 ++-- libavcodec/hevc_filter.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/libavcodec/hevc.c b/libavcodec/hevc.c index 2f33d1d8a0..f001a6c627 100644 --- a/libavcodec/hevc.c +++ b/libavcodec/hevc.c @@ -688,8 +688,8 @@ static int hls_slice_header(HEVCContext *s) s->HEVClc->first_qp_group = !s->sh.dependent_slice_segment_flag; if (!s->pps->cu_qp_delta_enabled_flag) - s->HEVClc->qp_y = ((s->sh.slice_qp + 52 + 2 * s->sps->qp_bd_offset) % - (52 + s->sps->qp_bd_offset)) - s->sps->qp_bd_offset; + s->HEVClc->qp_y = FFUMOD(s->sh.slice_qp + 52 + 2 * s->sps->qp_bd_offset, + 52 + s->sps->qp_bd_offset) - s->sps->qp_bd_offset; s->slice_initialized = 1; diff --git a/libavcodec/hevc_filter.c b/libavcodec/hevc_filter.c index ae72fbbe49..8353e15ea0 100644 --- a/libavcodec/hevc_filter.c +++ b/libavcodec/hevc_filter.c @@ -160,8 +160,8 @@ void ff_hevc_set_qPy(HEVCContext *s, int xC, int yC, if (s->HEVClc->tu.cu_qp_delta != 0) { int off = s->sps->qp_bd_offset; - s->HEVClc->qp_y = ((qp_y + s->HEVClc->tu.cu_qp_delta + 52 + 2 * off) % - (52 + off)) - off; + s->HEVClc->qp_y = FFUMOD(qp_y + s->HEVClc->tu.cu_qp_delta + 52 + 2 * off, + 52 + off) - off; } else s->HEVClc->qp_y = qp_y; }