Skip to content

Commit 6b0c7f1

Browse files
tuzm24yearly-kim
andauthored
Bugfixes for metadata (#132)
- Filler metadata pld decode. - When pld size is 0. Signed-off-by: Yangwoo Kim <yearly.kim@samsung.com> Co-authored-by: Yangwoo Kim <yearly.kim@samsung.com>
1 parent 1df8a8f commit 6b0c7f1

File tree

3 files changed

+19
-24
lines changed

3 files changed

+19
-24
lines changed

src/oapv_bs.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,7 @@ u32 oapv_bsr_peek(oapv_bs_t *bs, int size)
305305

306306
void *oapv_bsr_sink(oapv_bs_t *bs)
307307
{
308-
oapv_assert_rv(bs->cur + BSW_GET_SINK_BYTE(bs) < bs->end, NULL);
308+
oapv_assert_rv(bs->cur - BSW_GET_SINK_BYTE(bs) < bs->end, NULL);
309309
oapv_assert_rv((bs->leftbits & 7) == 0, NULL);
310310
bs->cur = bs->cur - (bs->leftbits >> 3);
311311
bs->code = 0;

src/oapv_metadata.c

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,13 @@ static int meta_verify_mdp_data(int type, int size, u8 *data)
156156
return OAPV_ERR_MALFORMED_BITSTREAM;
157157
}
158158
}
159+
else if(type == OAPV_METADATA_FILLER) {
160+
for(int i = 0; i < size; i++) {
161+
if(data[i] != 0xFF) {
162+
return OAPV_ERR_MALFORMED_BITSTREAM;
163+
}
164+
}
165+
}
159166
else {
160167
return OAPV_OK;
161168
}
@@ -182,12 +189,12 @@ int oapvm_set(oapvm_t mid, int group_id, int type, void *data, int size)
182189

183190
oapvm_ctx_t *ctx = meta_id_to_ctx(mid);
184191
oapv_assert_rv(ctx, OAPV_ERR_INVALID_ARGUMENT);
185-
oapv_assert_rv((data != NULL && size > 0), OAPV_ERR_INVALID_ARGUMENT);
192+
oapv_assert_rv((data != NULL && size > 0) || (data == NULL && size == 0), OAPV_ERR_INVALID_ARGUMENT);
186193

187194
ret = meta_verify_mdp_data(type, size, (u8 *)data);
188195
oapv_assert_rv(OAPV_SUCCEEDED(ret), ret);
189196

190-
if(type == OAPV_METADATA_USER_DEFINED){
197+
if(type == OAPV_METADATA_USER_DEFINED) {
191198
uuid = (u8 *)data;
192199
}
193200

src/oapv_vlc.c

Lines changed: 9 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1131,36 +1131,24 @@ int oapvd_vlc_metadata(oapv_bs_t *bs, u32 pbu_size, oapvm_t mid, int group_id)
11311131
payload_size += t0;
11321132
oapv_assert_gv(payload_size <= metadata_size, ret, OAPV_ERR_MALFORMED_BITSTREAM, ERR);
11331133

1134-
if(payload_size > 0) {
1135-
oapv_assert_gv(BSR_GET_LEFT_BYTE(bs) >= payload_size, ret, OAPV_ERR_MALFORMED_BITSTREAM, ERR);
1136-
payload_data = oapv_bsr_sink(bs);
1137-
1138-
if(payload_type == OAPV_METADATA_FILLER) {
1139-
for(int i = 0; i < payload_size; i++) {
1140-
t0 = oapv_bsr_read(bs, 8);
1141-
DUMP_HLS(payload_data, t0);
1142-
oapv_assert_gv(t0 == 0xFF, ret, OAPV_ERR_MALFORMED_BITSTREAM, ERR);
1143-
}
1144-
}
1145-
else {
1134+
oapv_assert_gv(BSR_GET_LEFT_BYTE(bs) >= payload_size, ret, OAPV_ERR_MALFORMED_BITSTREAM, ERR);
1135+
payload_data = oapv_bsr_sink(bs);
11461136
#if ENC_DEC_DUMP
1147-
for(int i = 0; i < payload_size; i++) {
1148-
t0 = oapv_bsr_read(bs, 8);
1149-
DUMP_HLS(payload_data, t0);
1150-
}
1151-
#else
1152-
BSR_MOVE_BYTE_ALIGN(bs, payload_size);
1153-
#endif
1154-
}
1137+
for(int i = 0; i < payload_size; i++) {
1138+
t0 = bs->cur[i];
1139+
DUMP_HLS(payload_data, t0);
11551140
}
1156-
else {
1141+
#endif
1142+
if (payload_size == 0) {
11571143
payload_data = NULL;
11581144
}
1145+
BSR_MOVE_BYTE_ALIGN(bs, payload_size);
11591146
ret = oapvm_set(mid, group_id, payload_type, payload_data, payload_size);
11601147
oapv_assert_g(OAPV_SUCCEEDED(ret), ERR);
11611148
metadata_size -= payload_size;
11621149
}
11631150
const u32 target_read_size = (pbu_size - 8);
1151+
oapv_assert_gv(target_read_size >= (bs->cur - bs_start_pos), ret, OAPV_ERR_MALFORMED_BITSTREAM, ERR);
11641152
ret = oapvd_vlc_filler(bs, target_read_size - (bs->cur - bs_start_pos));
11651153
oapv_assert_g(OAPV_SUCCEEDED(ret), ERR);
11661154
return OAPV_OK;

0 commit comments

Comments
 (0)