From b3427a4c49b844e6f4cd1a3f1c0b7474dda358d6 Mon Sep 17 00:00:00 2001 From: Ritu Baldwa Date: Wed, 28 Mar 2018 13:22:45 +0530 Subject: [PATCH] Decoder: Add missing error checks for parsing sps or pps Return error to application if valid sps or pps has not been decoded. Also add check to prevent parsing of pps, if valid sps is not present. Test: Tested a few clips with missing sps/pps Bug: 129746168 Bug: 130575087 Change-Id: I1a6409d1cffc66c1b910d2102ab10a94e0227107 --- decoder/ih264d_api.c | 8 +------- decoder/ih264d_parse_headers.c | 6 ++++++ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/decoder/ih264d_api.c b/decoder/ih264d_api.c index 25ead89..91f78a1 100644 --- a/decoder/ih264d_api.c +++ b/decoder/ih264d_api.c @@ -2429,16 +2429,10 @@ WORD32 ih264d_video_decode(iv_obj_t *dec_hdl, void *pv_api_ip, void *pv_api_op) } //Report if header (sps and pps) has not been decoded yet - if(ps_dec->i4_header_decoded != 3) - { - ps_dec_op->u4_error_code |= (1 << IVD_INSUFFICIENTDATA); - - } - if(ps_dec->i4_decode_header == 1 && ps_dec->i4_header_decoded != 3) { ps_dec_op->u4_error_code |= (1 << IVD_INSUFFICIENTDATA); - + api_ret_value = IV_FAIL; } if(ps_dec->u4_prev_nal_skipped) { diff --git a/decoder/ih264d_parse_headers.c b/decoder/ih264d_parse_headers.c index a53d7c4..edb51ed 100644 --- a/decoder/ih264d_parse_headers.c +++ b/decoder/ih264d_parse_headers.c @@ -205,6 +205,9 @@ WORD32 ih264d_parse_pps(dec_struct_t * ps_dec, dec_bit_stream_t * ps_bitstrm) UWORD8 u1_more_data_flag; WORD32 i4_i; + if(!(ps_dec->i4_header_decoded & 1)) + return ERROR_INV_SPS_PPS_T; + /*--------------------------------------------------------------------*/ /* Decode pic_parameter_set_id and find corresponding pic params */ /*--------------------------------------------------------------------*/ @@ -230,6 +233,9 @@ WORD32 ih264d_parse_pps(dec_struct_t * ps_dec, dec_bit_stream_t * ps_bitstrm) return ERROR_INV_SPS_PPS_T; COPYTHECONTEXT("PPS: seq_parameter_set_id",u4_temp); ps_sps = &ps_dec->ps_sps[u4_temp]; + + if(FALSE == ps_sps->u1_is_valid) + return ERROR_INV_SPS_PPS_T; ps_pps->ps_sps = ps_sps; /*--------------------------------------------------------------------*/