summaryrefslogtreecommitdiffstats
path: root/decoder
diff options
context:
space:
mode:
authorNaveen Kumar P <naveenkumar.p@ittiam.com>2017-08-03 15:50:41 +0530
committerMSe <mse1969@posteo.de>2018-01-10 22:14:23 +0100
commit567a98be9308fc0da5bb441d266e327eb88c7be7 (patch)
tree01e6ee9b408c11ca1863f1f0f5925392af2fae99 /decoder
parentb56fef66b160d138ee3af5ffe625fdfbcf3d9a89 (diff)
downloadandroid_external_libhevc-567a98be9308fc0da5bb441d266e327eb88c7be7.tar.gz
android_external_libhevc-567a98be9308fc0da5bb441d266e327eb88c7be7.tar.bz2
android_external_libhevc-567a98be9308fc0da5bb441d266e327eb88c7be7.zip
Fix prev slice incomplete check
Bug: 64552185 Bug: 65034175 Move the decision to signal missing ctbs as skipped ctbs of previous slice to the end of current slice hdr parsing to ensure no error in slice hdr parsing. Change-Id: Ia33b4be31dad6225b04e7b20b9000059c87941c4 (cherry picked from commit 74f35f191022c06863dacd33a3651a33be3ef08d) (cherry picked from commit 9c24714e25d6ba713549a573df1d496479dce2b1) CVE-2017-13187
Diffstat (limited to 'decoder')
-rw-r--r--decoder/ihevcd_parse_slice_header.c23
1 files changed, 12 insertions, 11 deletions
diff --git a/decoder/ihevcd_parse_slice_header.c b/decoder/ihevcd_parse_slice_header.c
index ae19328..8dd3b13 100644
--- a/decoder/ihevcd_parse_slice_header.c
+++ b/decoder/ihevcd_parse_slice_header.c
@@ -234,6 +234,7 @@ IHEVCD_ERROR_T ihevcd_parse_slice_header(codec_t *ps_codec,
WORD8 i1_nal_unit_type = ps_nal->i1_nal_unit_type;
WORD32 num_poc_total_curr = 0;
WORD32 slice_address;
+ WORD32 prev_slice_incomplete_flag = 0;
if(ps_codec->i4_slice_error == 1)
return ret;
@@ -730,16 +731,7 @@ IHEVCD_ERROR_T ihevcd_parse_slice_header(codec_t *ps_codec,
{
if(ps_codec->i4_pic_present)
{
- slice_header_t *ps_slice_hdr_next;
- ps_codec->i4_slice_error = 1;
- ps_codec->s_parse.i4_cur_slice_idx--;
- if(ps_codec->s_parse.i4_cur_slice_idx < 0)
- ps_codec->s_parse.i4_cur_slice_idx = 0;
-
- ps_slice_hdr_next = ps_codec->s_parse.ps_slice_hdr_base + ((ps_codec->s_parse.i4_cur_slice_idx + 1) & (MAX_SLICE_HDR_CNT - 1));
- ps_slice_hdr_next->i2_ctb_x = slice_address % ps_sps->i2_pic_wd_in_ctb;
- ps_slice_hdr_next->i2_ctb_y = slice_address / ps_sps->i2_pic_wd_in_ctb;
- return ret;
+ prev_slice_incomplete_flag = 1;
}
else
{
@@ -1009,7 +1001,8 @@ IHEVCD_ERROR_T ihevcd_parse_slice_header(codec_t *ps_codec,
slice_header_t *ps_slice_hdr_prev = ps_codec->s_parse.ps_slice_hdr_base;
ihevcd_copy_slice_hdr(ps_codec, 0, (ps_codec->s_parse.i4_cur_slice_idx & (MAX_SLICE_HDR_CNT - 1)));
- ps_codec->i4_slice_error = 1;
+ prev_slice_incomplete_flag = 1;
+ ASSERT(ps_codec->s_parse.i4_cur_slice_idx == 1);
ps_slice_hdr_prev->i2_ctb_x = 0;
ps_slice_hdr_prev->i2_ctb_y = 0;
@@ -1048,5 +1041,13 @@ IHEVCD_ERROR_T ihevcd_parse_slice_header(codec_t *ps_codec,
}
}
+ if(prev_slice_incomplete_flag)
+ {
+ ps_codec->i4_slice_error = 1;
+ ps_codec->s_parse.i4_cur_slice_idx--;
+ if(ps_codec->s_parse.i4_cur_slice_idx < 0)
+ ps_codec->s_parse.i4_cur_slice_idx = 0;
+ }
+
return ret;
}