diff options
author | Dale Curtis <dalecurtis@chromium.org> | 2017-11-28 13:40:20 -0800 |
---|---|---|
committer | Michael Niedermayer <michael@niedermayer.cc> | 2017-12-02 19:14:23 +0100 |
commit | 09494d098405738a5972e0052110af65b3ff7e72 (patch) | |
tree | 94d0065cdf42ceded0905ef870148d67e4d06567 /libavformat/oggdec.c | |
parent | 53c492640c6b4690715793372454194379093d21 (diff) | |
download | ffmpeg-09494d098405738a5972e0052110af65b3ff7e72.tar.gz |
avformat/oggdec: Respect AVERROR codes returned by ogg parsers.
Fixes ticket #6804. All of the ogg header and packet parsers may
return standard AVERROR codes; these return values should not be
treated as success.
Additionally changes oggparsevorbis, to not give up too early
with certain types of poorly muxed files.
Signed-off-by: Dale Curtis <dalecurtis@chromium.org>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
Diffstat (limited to 'libavformat/oggdec.c')
-rw-r--r-- | libavformat/oggdec.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/libavformat/oggdec.c b/libavformat/oggdec.c index 193a286e43..38f60653f9 100644 --- a/libavformat/oggdec.c +++ b/libavformat/oggdec.c @@ -543,7 +543,11 @@ static int ogg_packet(AVFormatContext *s, int *sid, int *dstart, int *dsize, os->incomplete = 0; if (os->header) { - os->header = os->codec->header(s, idx); + if ((ret = os->codec->header(s, idx)) < 0) { + av_log(s, AV_LOG_ERROR, "Header processing failed: %s\n", av_err2str(ret)); + return ret; + } + os->header = ret; if (!os->header) { os->segp = segp; os->psize = psize; @@ -574,8 +578,12 @@ static int ogg_packet(AVFormatContext *s, int *sid, int *dstart, int *dsize, } else { os->pflags = 0; os->pduration = 0; - if (os->codec && os->codec->packet) - os->codec->packet(s, idx); + if (os->codec && os->codec->packet) { + if ((ret = os->codec->packet(s, idx)) < 0) { + av_log(s, AV_LOG_ERROR, "Packet processing failed: %s\n", av_err2str(ret)); + return ret; + } + } if (sid) *sid = idx; if (dstart) |