[h265d]: Add few more checks for invalid parameters in sps

Following elements didn't have a bound check in SPS as spec doesn't list
the bounds on these explicitly.

log2_min_cb_size, log2_diff_max_min_coding_block_size,
log2_min_tb_size and log2_diff_max_min_transform_block_size

Added appopriate error checks on these fields

Signed-off-by: Chen Jinsen <kevin.chen@rock-chips.com>
Change-Id: I4762f543726650855e5cd333c48a7c41cf0fee0f
This commit is contained in:
Chen Jinsen
2022-01-25 09:34:50 +08:00
committed by Herman Chen
parent cf1c38ca0c
commit a7dd44baa9
2 changed files with 29 additions and 0 deletions

View File

@@ -1577,17 +1577,38 @@ RK_S32 mpp_hevc_decode_nal_sps(HEVCContext *s)
h265d_dbg(H265D_DBG_SPS, "2 read bit left %d", gb->num_remaining_bits_in_curr_byte_ + gb->bytes_left_ * 8);
READ_UE(gb, &sps->log2_min_cb_size) ;
if (sps->log2_min_cb_size > (LOG2_MAX_CU_SIZE - 3)) {
mpp_err( "Invalid value for log2_min_cb_size");
ret = MPP_ERR_STREAM;
goto err;
}
sps->log2_min_cb_size += 3;
h265d_dbg(H265D_DBG_SPS, "sps->log2_min_cb_size %d", sps->log2_min_cb_size);
READ_UE(gb, &sps->log2_diff_max_min_coding_block_size);
if (sps->log2_diff_max_min_coding_block_size > (LOG2_MAX_CU_SIZE - LOG2_MIN_CU_SIZE)) {
mpp_err( "Invalid value for log2_diff_max_min_coding_block_size");
ret = MPP_ERR_STREAM;
goto err;
}
h265d_dbg(H265D_DBG_SPS, "sps->log2_diff_max_min_coding_block_size %d", sps->log2_diff_max_min_coding_block_size);
READ_UE(gb, &sps->log2_min_tb_size);
if (sps->log2_min_tb_size > (LOG2_MAX_TU_SIZE - 2)) {
mpp_err( "Invalid value for log2_min_tb_size");
ret = MPP_ERR_STREAM;
goto err;
}
sps->log2_min_tb_size += 2;
h265d_dbg(H265D_DBG_SPS, "sps->log2_min_tb_size %d", sps->log2_min_tb_size);
READ_UE(gb, &log2_diff_max_min_transform_block_size);
if (log2_diff_max_min_transform_block_size > (LOG2_MAX_TU_SIZE - LOG2_MIN_TU_SIZE)) {
mpp_err( "Invalid value for log2_diff_max_min_transform_block_size");
ret = MPP_ERR_STREAM;
goto err;
}
h265d_dbg(H265D_DBG_SPS, "sps->log2_diff_max_min_transform_block_size %d", log2_diff_max_min_transform_block_size);
sps->log2_max_trafo_size = log2_diff_max_min_transform_block_size +

View File

@@ -110,6 +110,14 @@
#define MPP_PROFILE_HEVC_MAIN_10 2
#define MPP_PROFILE_HEVC_MAIN_STILL_PICTURE 3
#define LOG2_MAX_CTB_SIZE 6
#define LOG2_MIN_CTB_SIZE 4
#define LOG2_MAX_PU_SIZE 6
#define LOG2_MIN_PU_SIZE 2
#define LOG2_MAX_TU_SIZE 5
#define LOG2_MIN_TU_SIZE 2
#define LOG2_MAX_CU_SIZE 6
#define LOG2_MIN_CU_SIZE 3
/**
* Value of the luma sample at position (x, y) in the 2D array tab.