mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-10-06 09:36:49 +08:00
[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:
@@ -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);
|
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) ;
|
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;
|
sps->log2_min_cb_size += 3;
|
||||||
|
|
||||||
h265d_dbg(H265D_DBG_SPS, "sps->log2_min_cb_size %d", sps->log2_min_cb_size);
|
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);
|
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);
|
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);
|
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;
|
sps->log2_min_tb_size += 2;
|
||||||
|
|
||||||
h265d_dbg(H265D_DBG_SPS, "sps->log2_min_tb_size %d", sps->log2_min_tb_size);
|
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);
|
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);
|
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 +
|
sps->log2_max_trafo_size = log2_diff_max_min_transform_block_size +
|
||||||
|
@@ -110,6 +110,14 @@
|
|||||||
#define MPP_PROFILE_HEVC_MAIN_10 2
|
#define MPP_PROFILE_HEVC_MAIN_10 2
|
||||||
#define MPP_PROFILE_HEVC_MAIN_STILL_PICTURE 3
|
#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.
|
* Value of the luma sample at position (x, y) in the 2D array tab.
|
||||||
|
Reference in New Issue
Block a user