@@ -2065,20 +2065,22 @@ int oapvd_info(void *au, int au_size, oapv_au_info_t *aui)
20652065
20662066 DUMP_SET (0 );
20672067
2068+ /* 'au' address contains series of PBU */
20682069 do {
20692070 oapv_bs_t bs ;
2070- u32 pbu_size = 0 ;
2071+ u32 pbu_size = 0 ;
20712072 u32 remain = au_size - cur_read_size ;
20722073 oapv_assert_rv ((remain >= 8 ), OAPV_ERR_MALFORMED_BITSTREAM );
20732074 oapv_bsr_init (& bs , (u8 * )au + cur_read_size , remain , NULL );
20742075
2075- ret = oapvd_vlc_pbu_size (& bs , & pbu_size ); // 4 byte
2076+ ret = oapvd_vlc_pbu_size (& bs , & pbu_size ); // read pbu_size ( 4 byte)
20762077 oapv_assert_rv (OAPV_SUCCEEDED (ret ), ret );
2077- oapv_assert_rv ((pbu_size + 4 ) <= bs .size , OAPV_ERR_MALFORMED_BITSTREAM );
2078+ remain -= 4 ; // pbu_size syntax
2079+ oapv_assert_rv (pbu_size <= remain , OAPV_ERR_MALFORMED_BITSTREAM );
20782080
20792081 /* pbu header */
20802082 oapv_pbuh_t pbuh ;
2081- ret = oapvd_vlc_pbu_header (& bs , & pbuh ); // 4 byte
2083+ ret = oapvd_vlc_pbu_header (& bs , & pbuh ); // read pbu_header() ( 4 byte)
20822084 oapv_assert_rv (OAPV_SUCCEEDED (ret ), OAPV_ERR_MALFORMED_BITSTREAM );
20832085 if (pbuh .pbu_type == OAPV_PBU_TYPE_AU_INFO ) {
20842086 // parse access_unit_info in PBU
@@ -2109,7 +2111,7 @@ int oapvd_info(void *au, int au_size, oapv_au_info_t *aui)
21092111 frm_count ++ ;
21102112 }
21112113 aui -> num_frms = frm_count ;
2112- cur_read_size += pbu_size + 4 ;
2114+ cur_read_size += pbu_size + 4 ; /* 4byte is for pbu_size syntax itself */
21132115 } while (cur_read_size < au_size );
21142116 DUMP_SET (1 );
21152117 return OAPV_OK ;
0 commit comments