Skip to content

Commit e9dcd8e

Browse files
authored
Fixed buffer overflow in Android video codec (#4409)
1 parent d62dd9d commit e9dcd8e

File tree

1 file changed

+11
-7
lines changed

1 file changed

+11
-7
lines changed

pjmedia/src/pjmedia-codec/and_vid_mediacodec.cpp

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1386,7 +1386,7 @@ static pj_status_t and_media_decode(pjmedia_vid_codec *codec,
13861386
{
13871387
pj_status_t status = PJ_SUCCESS;
13881388
pj_size_t output_size;
1389-
int len;
1389+
int len = 0;
13901390
media_status_t am_status;
13911391
and_med_buf_info buf_info;
13921392
pj_uint8_t *output_buf;
@@ -1490,12 +1490,16 @@ static pj_status_t and_media_decode(pjmedia_vid_codec *codec,
14901490
PJ_LOG(4,(THIS_FILE, "Decoder getOutputBuffer failed"));
14911491
return status;
14921492
}
1493-
len = write_yuv((pj_uint8_t *)output->buf,
1494-
output->size,
1495-
output_buf,
1496-
and_media_data->dec_stride_len,
1497-
and_media_data->prm->dec_fmt.det.vid.size.w,
1498-
and_media_data->prm->dec_fmt.det.vid.size.h);
1493+
if (output->size >= and_media_data->prm->dec_fmt.det.vid.size.w *
1494+
and_media_data->prm->dec_fmt.det.vid.size.h * 3 / 2)
1495+
{
1496+
len = write_yuv((pj_uint8_t *)output->buf,
1497+
output->size,
1498+
output_buf,
1499+
and_media_data->dec_stride_len,
1500+
and_media_data->prm->dec_fmt.det.vid.size.w,
1501+
and_media_data->prm->dec_fmt.det.vid.size.h);
1502+
}
14991503

15001504
am_status = AMediaCodec_releaseOutputBuffer(and_media_data->dec,
15011505
buf_info.index, 0);

0 commit comments

Comments
 (0)