summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarish Mahendrakar <harish.mahendrakar@ittiam.com>2017-01-13 17:08:35 +0530
committerSean McCreary <mccreary@mcwest.org>2017-03-22 20:06:57 -0600
commitd44b7efd33690d47e35e28266baac2f9999bd541 (patch)
tree6413c40b20b5c9db8ce12961667277aa9acb2030
parent0b30413bdbb18e75af9a93b4b67f16c3aa14803f (diff)
downloadandroid_external_libhevc-d44b7efd33690d47e35e28266baac2f9999bd541.tar.gz
android_external_libhevc-d44b7efd33690d47e35e28266baac2f9999bd541.tar.bz2
android_external_libhevc-d44b7efd33690d47e35e28266baac2f9999bd541.zip
Added check for invalid log2_max_transform_block_size in SPS
Bug: 33918236 Bug: 33964497 Bug: 33965905 Bug: 33862021 CVE-2017-0472 AOSP Change-Id: If121221d0f6e983c05d95d123af9bed378d1961f Change-Id: Ib3ef6e3abc584ed1d797f18fc47b22d13129beda (cherry picked from commit b5cae8181efbb9649ffddb659305a0da59ed445a) (cherry picked from commit dfa7251ff270ae7e12a019e6735542e36b2a47e0)
-rw-r--r--decoder/ihevcd_parse_headers.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/decoder/ihevcd_parse_headers.c b/decoder/ihevcd_parse_headers.c
index ecc271a..17de2a2 100644
--- a/decoder/ihevcd_parse_headers.c
+++ b/decoder/ihevcd_parse_headers.c
@@ -1191,6 +1191,7 @@ IHEVCD_ERROR_T ihevcd_parse_sps(codec_t *ps_codec)
sps_t *ps_sps;
profile_tier_lvl_info_t s_ptl;
bitstrm_t *ps_bitstrm = &ps_codec->s_parse.s_bitstrm;
+ WORD32 ctb_log2_size_y = 0;
BITS_PARSE("video_parameter_set_id", value, ps_bitstrm, 4);
@@ -1323,6 +1324,8 @@ IHEVCD_ERROR_T ihevcd_parse_sps(codec_t *ps_codec)
UEV_PARSE("log2_diff_max_min_coding_block_size", value, ps_bitstrm);
ps_sps->i1_log2_diff_max_min_coding_block_size = value;
+ ctb_log2_size_y = ps_sps->i1_log2_min_coding_block_size + ps_sps->i1_log2_diff_max_min_coding_block_size;
+
UEV_PARSE("log2_min_transform_block_size_minus2", value, ps_bitstrm);
ps_sps->i1_log2_min_transform_block_size = value + 2;
@@ -1332,6 +1335,12 @@ IHEVCD_ERROR_T ihevcd_parse_sps(codec_t *ps_codec)
ps_sps->i1_log2_max_transform_block_size = ps_sps->i1_log2_min_transform_block_size +
ps_sps->i1_log2_diff_max_min_transform_block_size;
+ if ((ps_sps->i1_log2_max_transform_block_size < 0) ||
+ (ps_sps->i1_log2_max_transform_block_size > MIN(ctb_log2_size_y, 5)))
+ {
+ return IHEVCD_INVALID_PARAMETER;
+ }
+
ps_sps->i1_log2_ctb_size = ps_sps->i1_log2_min_coding_block_size +
ps_sps->i1_log2_diff_max_min_coding_block_size;