diff options
author | Alexandra Hájková <alexandra.khirnova@gmail.com> | 2015-07-17 14:17:02 +0200 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2015-07-22 12:11:46 +0200 |
commit | 93f16f338f9e8aba0c006752eb3afc3fe6e137fd (patch) | |
tree | 1d392d137751a6d573ca78446ac41aa7fd267091 /libavformat | |
parent | 5655236a67203d923755f285584c6e68abe7e33f (diff) | |
download | ffmpeg-93f16f338f9e8aba0c006752eb3afc3fe6e137fd.tar.gz |
asfdec: close the demuxer properly when read_header is failing
Signed-off-by: Anton Khirnov <anton@khirnov.net>
Diffstat (limited to 'libavformat')
-rw-r--r-- | libavformat/asfdec.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/libavformat/asfdec.c b/libavformat/asfdec.c index a6250283d3..6a71be9ab2 100644 --- a/libavformat/asfdec.c +++ b/libavformat/asfdec.c @@ -1659,14 +1659,14 @@ static int asf_read_header(AVFormatContext *s) if (ret == AVERROR_EOF && asf->data_reached) break; else - return ret; + goto failed; } g = find_guid(guid); if (g) { asf->unknown_offset = asf->offset; asf->is_header = 1; if ((ret = g->read_object(s, g)) < 0) - return ret; + goto failed; } else { size = avio_rl64(pb); align_position(pb, asf->offset, size); @@ -1677,7 +1677,8 @@ static int asf_read_header(AVFormatContext *s) if (!asf->data_reached) { av_log(s, AV_LOG_ERROR, "Data Object was not found.\n"); - return AVERROR_INVALIDDATA; + ret = AVERROR_INVALIDDATA; + goto failed; } if (pb->seekable) avio_seek(pb, asf->first_packet_offset, SEEK_SET); @@ -1702,6 +1703,10 @@ static int asf_read_header(AVFormatContext *s) } return 0; + +failed: + asf_read_close(s); + return ret; } AVInputFormat ff_asf_demuxer = { |