summaryrefslogtreecommitdiff
path: root/libavformat/id3v2.c
diff options
context:
space:
mode:
authorMatthieu Bouron <matthieu.bouron@gmail.com>2013-01-19 13:32:58 +0100
committerMichael Niedermayer <michaelni@gmx.at>2013-01-20 04:39:56 +0100
commitb3b456b2588f67a152f3035cbc80d349898534c1 (patch)
tree967354689b70ea3dada1f7089839a80bd0dc8ea5 /libavformat/id3v2.c
parent0c6b0409af070a3bfb02b55fde8ba18219edc76b (diff)
lavf/id3v2: seek back to previous offset if header size is not matched
Makes ff_id3v2_read reset stream position at the end of ID3 data if the header size is not matched (caused by an EOF for example). Current behaviour (without the patch): filesize = 400 id3 data size = 399 file offset after ff_id3v2_read is 400 instead of 399 Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavformat/id3v2.c')
-rw-r--r--libavformat/id3v2.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/libavformat/id3v2.c b/libavformat/id3v2.c
index 98f8f9e94d..2cab5ac304 100644
--- a/libavformat/id3v2.c
+++ b/libavformat/id3v2.c
@@ -788,8 +788,10 @@ void ff_id3v2_read(AVFormatContext *s, const char *magic, ID3v2ExtraMeta **extra
/* save the current offset in case there's nothing to read/skip */
off = avio_tell(s->pb);
ret = avio_read(s->pb, buf, ID3v2_HEADER_SIZE);
- if (ret != ID3v2_HEADER_SIZE)
+ if (ret != ID3v2_HEADER_SIZE) {
+ avio_seek(s->pb, off, SEEK_SET);
break;
+ }
found_header = ff_id3v2_match(buf, magic);
if (found_header) {
/* parse ID3v2 header */