From 31fa91b4cdb86647092bcb2fc55d1b478362887e Mon Sep 17 00:00:00 2001 From: Vitaly Buka Date: Thu, 16 Apr 2020 22:17:23 -0700 Subject: [PATCH] Move index check before array access This lets us run code with -fsanitize=bounds. Bug: b/15471229 Change-Id: I5961ef43d21f04a0dc9e8bf7280dc27eb0a62094 --- vp9/encoder/vp9_encodeframe.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/vp9/encoder/vp9_encodeframe.c b/vp9/encoder/vp9_encodeframe.c index 13f9a1fbd..dd2e0692b 100644 --- a/vp9/encoder/vp9_encodeframe.c +++ b/vp9/encoder/vp9_encodeframe.c @@ -3766,9 +3766,6 @@ static int wiener_var_segment(VP9_COMP *cpi, BLOCK_SIZE bsize, int mi_row, static int get_rdmult_delta(VP9_COMP *cpi, BLOCK_SIZE bsize, int mi_row, int mi_col, int orig_rdmult) { const int gf_group_index = cpi->twopass.gf_group.index; - TplDepFrame *tpl_frame = &cpi->tpl_stats[gf_group_index]; - TplDepStats *tpl_stats = tpl_frame->tpl_stats_ptr; - int tpl_stride = tpl_frame->stride; int64_t intra_cost = 0; int64_t mc_dep_cost = 0; int mi_wide = num_8x8_blocks_wide_lookup[bsize]; @@ -3779,12 +3776,19 @@ static int get_rdmult_delta(VP9_COMP *cpi, BLOCK_SIZE bsize, int mi_row, int count = 0; double r0, rk, beta; + TplDepFrame *tpl_frame; + TplDepStats *tpl_stats; + int tpl_stride; + + if (gf_group_index >= MAX_ARF_GOP_SIZE) return orig_rdmult; + tpl_frame = &cpi->tpl_stats[gf_group_index]; + if (tpl_frame->is_valid == 0) return orig_rdmult; + tpl_stats = tpl_frame->tpl_stats_ptr; + tpl_stride = tpl_frame->stride; if (cpi->twopass.gf_group.layer_depth[gf_group_index] > 1) return orig_rdmult; - if (gf_group_index >= MAX_ARF_GOP_SIZE) return orig_rdmult; - for (row = mi_row; row < mi_row + mi_high; ++row) { for (col = mi_col; col < mi_col + mi_wide; ++col) { TplDepStats *this_stats = &tpl_stats[row * tpl_stride + col]; -- 2.40.0