Commit 3068f1c8 authored by Baptiste Coudurier's avatar Baptiste Coudurier

avoid reading beyond packet size

Originally committed as revision 5878 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent 9c050969
...@@ -724,14 +724,13 @@ static int gxf_write_media_packet(ByteIOContext *pb, GXFContext *ctx, AVPacket * ...@@ -724,14 +724,13 @@ static int gxf_write_media_packet(ByteIOContext *pb, GXFContext *ctx, AVPacket *
gxf_write_packet_header(pb, PKT_MEDIA); gxf_write_packet_header(pb, PKT_MEDIA);
if (sc->codec->codec_id == CODEC_ID_MPEG2VIDEO && pkt->size % 4) /* MPEG-2 frames must be padded */ if (sc->codec->codec_id == CODEC_ID_MPEG2VIDEO && pkt->size % 4) /* MPEG-2 frames must be padded */
padding = 4 - pkt->size % 4; padding = 4 - pkt->size % 4;
else if (sc->codec->codec_type == CODEC_TYPE_AUDIO)
padding = GXF_AUDIO_PACKET_SIZE - pkt->size;
gxf_write_media_preamble(pb, ctx, pkt, pkt->size + padding); gxf_write_media_preamble(pb, ctx, pkt, pkt->size + padding);
if (sc->codec->codec_type == CODEC_TYPE_AUDIO) put_buffer(pb, pkt->data, pkt->size);
put_buffer(pb, pkt->data, GXF_AUDIO_PACKET_SIZE);
else {
ctx->field_number += 2;
put_buffer(pb, pkt->data, pkt->size);
}
gxf_write_padding(pb, padding); gxf_write_padding(pb, padding);
if (sc->codec->codec_type == CODEC_TYPE_VIDEO)
ctx->field_number += 2;
return updatePacketSize(pb, pos); return updatePacketSize(pb, pos);
} }
...@@ -793,11 +792,10 @@ static int gxf_interleave_packet(AVFormatContext *s, AVPacket *out, AVPacket *pk ...@@ -793,11 +792,10 @@ static int gxf_interleave_packet(AVFormatContext *s, AVPacket *out, AVPacket *pk
if (sc->codec->codec_type == CODEC_TYPE_AUDIO && if (sc->codec->codec_type == CODEC_TYPE_AUDIO &&
(flush || fifo_size(&sc->audio_buffer, NULL) >= GXF_AUDIO_PACKET_SIZE)) { (flush || fifo_size(&sc->audio_buffer, NULL) >= GXF_AUDIO_PACKET_SIZE)) {
int size = flush ? fifo_size(&sc->audio_buffer, NULL) : GXF_AUDIO_PACKET_SIZE; int size = flush ? fifo_size(&sc->audio_buffer, NULL) : GXF_AUDIO_PACKET_SIZE;
av_new_packet(out, GXF_AUDIO_PACKET_SIZE); av_new_packet(out, size);
fifo_read(&sc->audio_buffer, out->data, size, NULL); fifo_read(&sc->audio_buffer, out->data, size, NULL);
gxf->audio_written++; gxf->audio_written++;
out->stream_index = i; out->stream_index = i;
out->size = size;
return 1; return 1;
} }
} }
......
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