aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorchamarthi.kishore <chamarthi.kishore@ittiam.com>2023-03-01 19:22:01 +0530
committerHarish Mahendrakar <harish.mahendrakar@ittiam.com>2023-03-01 15:01:00 -0800
commit7855d6e872ce04398fbab460b8d8fdea39866b4d (patch)
treebca194b195f1a04b6eaa15258f70839167e5a6b2
parent3a853e8247ce8e50df7e6a129adb29ab50dabb08 (diff)
downloadlibavc-7855d6e872ce04398fbab460b8d8fdea39866b4d.tar.gz
svcdec: Bug fix in header and SPS parsing w.r.t non dyadic SVC decoding
BUG=oss-fuzz: 56176 Test: svc_dec_fuzzer
-rw-r--r--decoder/svc/isvcd_parse_headers.c14
-rw-r--r--decoder/svc/isvcd_parse_slice.c10
2 files changed, 22 insertions, 2 deletions
diff --git a/decoder/svc/isvcd_parse_headers.c b/decoder/svc/isvcd_parse_headers.c
index b549f4c..abf4a1b 100644
--- a/decoder/svc/isvcd_parse_headers.c
+++ b/decoder/svc/isvcd_parse_headers.c
@@ -603,8 +603,8 @@ WORD32 isvcd_parse_subset_sps(svc_dec_lyr_struct_t *ps_svc_lyr_dec, dec_bit_stre
COPYTHECONTEXT("SPS_EXt: u1_extended_spatial_scalability_idc",
ps_seq_svc_ext->u1_extended_spatial_scalability_idc);
- /* u1_extended_spatial_scalability_idc value 0 is supported*/
- if(ps_seq_svc_ext->u1_extended_spatial_scalability_idc != 0)
+ /* u1_extended_spatial_scalability_idc value 0, 1 and 2 are supported */
+ if(ps_seq_svc_ext->u1_extended_spatial_scalability_idc > 2)
{
return ERROR_SVC_INV_SUBSET_SPS;
}
@@ -661,6 +661,11 @@ WORD32 isvcd_parse_subset_sps(svc_dec_lyr_struct_t *ps_svc_lyr_dec, dec_bit_stre
COPYTHECONTEXT("SPS_EXt: i4_seq_scaled_ref_layer_left_offset",
ps_seq_svc_ext->i4_seq_scaled_ref_layer_left_offset);
+ if(ps_seq_svc_ext->i4_seq_scaled_ref_layer_left_offset != 0)
+ {
+ return ERROR_SVC_INV_SUBSET_SPS;
+ }
+
if(ps_seq_svc_ext->i4_seq_scaled_ref_layer_left_offset >= MAX_SCLD_REF_LAYER_OFFSET ||
ps_seq_svc_ext->i4_seq_scaled_ref_layer_left_offset < MIN_SCLD_REF_LAYER_OFFSET)
{
@@ -672,6 +677,11 @@ WORD32 isvcd_parse_subset_sps(svc_dec_lyr_struct_t *ps_svc_lyr_dec, dec_bit_stre
COPYTHECONTEXT("SPS_EXt: i4_seq_scaled_ref_layer_top_offset",
ps_seq_svc_ext->i4_seq_scaled_ref_layer_top_offset);
+ if(ps_seq_svc_ext->i4_seq_scaled_ref_layer_top_offset != 0)
+ {
+ return ERROR_SVC_INV_SUBSET_SPS;
+ }
+
if(ps_seq_svc_ext->i4_seq_scaled_ref_layer_top_offset >= MAX_SCLD_REF_LAYER_OFFSET ||
ps_seq_svc_ext->i4_seq_scaled_ref_layer_top_offset < MIN_SCLD_REF_LAYER_OFFSET)
{
diff --git a/decoder/svc/isvcd_parse_slice.c b/decoder/svc/isvcd_parse_slice.c
index 464297d..f8270b6 100644
--- a/decoder/svc/isvcd_parse_slice.c
+++ b/decoder/svc/isvcd_parse_slice.c
@@ -1719,6 +1719,11 @@ WORD32 isvcd_parse_slice_header(svc_dec_lyr_struct_t *ps_svc_lyr_dec)
COPYTHECONTEXT("Slice Header SVC ext: i4_scaled_ref_layer_left_offset",
ps_svc_slice_params->i4_scaled_ref_layer_left_offset);
+ if(ps_svc_slice_params->i4_scaled_ref_layer_left_offset != 0)
+ {
+ return ERROR_INV_SLICE_HDR_T;
+ }
+
if(ps_svc_slice_params->i4_scaled_ref_layer_left_offset >= MAX_SCLD_REF_LAYER_OFFSET ||
ps_svc_slice_params->i4_scaled_ref_layer_left_offset < MIN_SCLD_REF_LAYER_OFFSET)
{
@@ -1730,6 +1735,11 @@ WORD32 isvcd_parse_slice_header(svc_dec_lyr_struct_t *ps_svc_lyr_dec)
COPYTHECONTEXT("Slice Header SVC ext: i4_scaled_ref_layer_top_offset",
ps_svc_slice_params->i4_scaled_ref_layer_top_offset);
+ if(ps_svc_slice_params->i4_scaled_ref_layer_top_offset != 0)
+ {
+ return ERROR_INV_SLICE_HDR_T;
+ }
+
if(ps_svc_slice_params->i4_scaled_ref_layer_top_offset >= MAX_SCLD_REF_LAYER_OFFSET ||
ps_svc_slice_params->i4_scaled_ref_layer_top_offset < MIN_SCLD_REF_LAYER_OFFSET)
{