Skip to content

Commit f66bc3b

Browse files
authored
removed overflow issue of pbu_size (#52)
Signed-off-by: kp5.choi@samsung.com <kp5.choi@samsung.com>
1 parent 5909bcb commit f66bc3b

File tree

1 file changed

+7
-5
lines changed

1 file changed

+7
-5
lines changed

src/oapv.c

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)