diff options
author | Anton Khirnov <anton@khirnov.net> | 2012-07-30 09:28:35 +0400 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2012-07-31 22:53:54 +0400 |
commit | 782e64fbe1daa84c38594db037d0edfac7193c37 (patch) | |
tree | cedf605a86dbedc8f67569e1cceae1c1951cb83b /libavformat/wv.c | |
parent | 9c9c21eaa1f0adf1c5cd17f9b31a18b979bffe37 (diff) |
wv,mpc8: don't return apetag data in packets.
Diffstat (limited to 'libavformat/wv.c')
-rw-r--r-- | libavformat/wv.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/libavformat/wv.c b/libavformat/wv.c index 3fd1abcb87..39bb6144d3 100644 --- a/libavformat/wv.c +++ b/libavformat/wv.c @@ -64,6 +64,8 @@ typedef struct { int block_parsed; uint8_t extra[WV_EXTRA_SIZE]; int64_t pos; + + int64_t apetag_start; } WVContext; static int wv_probe(AVProbeData *p) @@ -88,6 +90,11 @@ static int wv_read_block_header(AVFormatContext *ctx, AVIOContext *pb, uint32_t chmask; wc->pos = avio_tell(pb); + + /* don't return bogus packets with the ape tag data */ + if (wc->apetag_start && wc->pos >= wc->apetag_start) + return AVERROR_EOF; + if (!append) { tag = avio_rl32(pb); if (tag != MKTAG('w', 'v', 'p', 'k')) @@ -252,7 +259,7 @@ static int wv_read_header(AVFormatContext *s) if (s->pb->seekable) { int64_t cur = avio_tell(s->pb); - ff_ape_parse_tag(s); + wc->apetag_start = ff_ape_parse_tag(s); if (!av_dict_get(s->metadata, "", NULL, AV_DICT_IGNORE_SUFFIX)) ff_id3v1_read(s); avio_seek(s->pb, cur, SEEK_SET); |