Commit 3b535bbf authored by Andreas Cadhalpun's avatar Andreas Cadhalpun

ffmdec: reset packet_end in case of failure

This fixes segmentation faults caused by passing a packet_ptr of NULL to
memcpy.
Reviewed-by: 's avatarMichael Niedermayer <michael@niedermayer.cc>
Signed-off-by: 's avatarAndreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>
(cherry picked from commit 40eb2531)
Signed-off-by: 's avatarAndreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>
parent bf446993
...@@ -113,9 +113,10 @@ static int ffm_read_data(AVFormatContext *s, ...@@ -113,9 +113,10 @@ static int ffm_read_data(AVFormatContext *s,
ffm->dts = avio_rb64(pb); ffm->dts = avio_rb64(pb);
frame_offset = avio_rb16(pb); frame_offset = avio_rb16(pb);
avio_read(pb, ffm->packet, ffm->packet_size - FFM_HEADER_SIZE); avio_read(pb, ffm->packet, ffm->packet_size - FFM_HEADER_SIZE);
ffm->packet_end = ffm->packet + (ffm->packet_size - FFM_HEADER_SIZE - fill_size); if (ffm->packet_size < FFM_HEADER_SIZE + fill_size || frame_offset < 0) {
if (ffm->packet_end < ffm->packet || frame_offset < 0)
return -1; return -1;
}
ffm->packet_end = ffm->packet + (ffm->packet_size - FFM_HEADER_SIZE - fill_size);
/* if first packet or resynchronization packet, we must /* if first packet or resynchronization packet, we must
handle it specifically */ handle it specifically */
if (ffm->first_packet || (frame_offset & 0x8000)) { if (ffm->first_packet || (frame_offset & 0x8000)) {
...@@ -131,8 +132,10 @@ static int ffm_read_data(AVFormatContext *s, ...@@ -131,8 +132,10 @@ static int ffm_read_data(AVFormatContext *s,
return 0; return 0;
} }
ffm->first_packet = 0; ffm->first_packet = 0;
if ((frame_offset & 0x7fff) < FFM_HEADER_SIZE) if ((frame_offset & 0x7fff) < FFM_HEADER_SIZE) {
ffm->packet_end = ffm->packet_ptr;
return -1; return -1;
}
ffm->packet_ptr = ffm->packet + (frame_offset & 0x7fff) - FFM_HEADER_SIZE; ffm->packet_ptr = ffm->packet + (frame_offset & 0x7fff) - FFM_HEADER_SIZE;
if (!header) if (!header)
break; break;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment