X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Foggdec.c;h=95190589ab3d400e47330a569aa3631be7599714;hb=1004a92cd44404ad55a75509cd289a70fa03d333;hp=27d16a3e4e5c04cf4ea6d864709dee0ecd558eea;hpb=06476249cd2332e30b66576633b2827adf3478dd;p=ffmpeg diff --git a/libavformat/oggdec.c b/libavformat/oggdec.c index 27d16a3e4e5..95190589ab3 100644 --- a/libavformat/oggdec.c +++ b/libavformat/oggdec.c @@ -216,7 +216,8 @@ static int ogg_replace_stream(AVFormatContext *s, uint32_t serial, int nsegs) uint8_t magic[8]; int64_t pos = avio_tell(s->pb); avio_skip(s->pb, nsegs); - avio_read(s->pb, magic, sizeof(magic)); + if (avio_read(s->pb, magic, sizeof(magic)) != sizeof(magic)) + return AVERROR_INVALIDDATA; avio_seek(s->pb, pos, SEEK_SET); codec = ogg_find_codec(magic, sizeof(magic)); if (!codec) { @@ -388,6 +389,9 @@ static int ogg_read_page(AVFormatContext *s, int *sid) avio_skip(bc, 8); /* seq, crc */ nsegs = avio_r8(bc); + if (avio_feof(bc)) + return AVERROR_EOF; + idx = ogg_find_stream(ogg, serial); if (idx < 0) { if (data_packets_seen(ogg)) @@ -851,7 +855,7 @@ retry: AV_PKT_DATA_SKIP_SAMPLES, 10); if(!side_data) - goto fail; + return AVERROR(ENOMEM); AV_WL32(side_data + 4, os->end_trimming); os->end_trimming = 0; } @@ -861,7 +865,7 @@ retry: AV_PKT_DATA_METADATA_UPDATE, os->new_metadata_size); if(!side_data) - goto fail; + return AVERROR(ENOMEM); memcpy(side_data, os->new_metadata, os->new_metadata_size); av_freep(&os->new_metadata); @@ -869,9 +873,6 @@ retry: } return psize; -fail: - av_packet_unref(pkt); - return AVERROR(ENOMEM); } static int64_t ogg_read_timestamp(AVFormatContext *s, int stream_index, @@ -941,7 +942,7 @@ static int ogg_read_seek(AVFormatContext *s, int stream_index, return ret; } -static int ogg_probe(AVProbeData *p) +static int ogg_probe(const AVProbeData *p) { if (!memcmp("OggS", p->buf, 5) && p->buf[5] <= 0x7) return AVPROBE_SCORE_MAX;