summaryrefslogtreecommitdiff
path: root/libavformat/wv.c
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2012-07-30 07:28:35 +0200
committerAnton Khirnov <anton@khirnov.net>2012-07-31 20:53:54 +0200
commit782e64fbe1daa84c38594db037d0edfac7193c37 (patch)
treecedf605a86dbedc8f67569e1cceae1c1951cb83b /libavformat/wv.c
parent9c9c21eaa1f0adf1c5cd17f9b31a18b979bffe37 (diff)
wv,mpc8: don't return apetag data in packets.
Diffstat (limited to 'libavformat/wv.c')
-rw-r--r--libavformat/wv.c9
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);