diff --git a/vp9/decoder/vp9_decodeframe.c b/vp9/decoder/vp9_decodeframe.c index 404a34525bb319eb2e6bff533556d235141cbaee..8efae959a6d899eb5553b5471923413c2bcd27ab 100644 --- a/vp9/decoder/vp9_decodeframe.c +++ b/vp9/decoder/vp9_decodeframe.c @@ -410,13 +410,17 @@ static void decode_partition(VP9_COMMON *const cm, MACROBLOCKD *const xd, vp9_reader* r, BLOCK_SIZE bsize) { const int hbs = num_8x8_blocks_wide_lookup[bsize] / 2; PARTITION_TYPE partition; - BLOCK_SIZE subsize; + BLOCK_SIZE subsize, uv_subsize; if (mi_row >= cm->mi_rows || mi_col >= cm->mi_cols) return; partition = read_partition(cm, xd, hbs, mi_row, mi_col, bsize, r); subsize = get_subsize(bsize, partition); + uv_subsize = ss_size_lookup[subsize][cm->subsampling_x][cm->subsampling_y]; + if (subsize >= BLOCK_8X8 && uv_subsize == BLOCK_INVALID) + vpx_internal_error(&cm->error, VPX_CODEC_CORRUPT_FRAME, + "Invalid block size."); if (subsize < BLOCK_8X8) { decode_block(cm, xd, tile, mi_row, mi_col, r, subsize); } else {