[FFmpeg-cvslog] avformat/ffmdec: Forward error code from ffm_read_header()
Michael Niedermayer
git at videolan.org
Sat Dec 3 20:47:44 EET 2016
ffmpeg | branch: master | Michael Niedermayer <michael at niedermayer.cc> | Sat Dec 3 18:29:35 2016 +0100| [fdf588d7cf68b5f4ff27de5b53508f0ff67c5a2e] | committer: Michael Niedermayer
avformat/ffmdec: Forward error code from ffm_read_header()
Signed-off-by: Michael Niedermayer <michael at niedermayer.cc>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=fdf588d7cf68b5f4ff27de5b53508f0ff67c5a2e
---
libavformat/ffmdec.c | 23 ++++++++++++++++++-----
1 file changed, 18 insertions(+), 5 deletions(-)
diff --git a/libavformat/ffmdec.c b/libavformat/ffmdec.c
index 30ad455..c5917a1 100644
--- a/libavformat/ffmdec.c
+++ b/libavformat/ffmdec.c
@@ -402,6 +402,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
if (!av_pix_fmt_desc_get(codecpar->format)) {
av_log(s, AV_LOG_ERROR, "Invalid pix fmt id: %d\n", codecpar->format);
codecpar->format = AV_PIX_FMT_NONE;
+ ret = AVERROR_INVALIDDATA;
goto fail;
}
avio_r8(pb); // qmin
@@ -545,11 +546,15 @@ static int ffm_read_header(AVFormatContext *s)
tag = avio_rl32(pb);
if (tag == MKTAG('F', 'F', 'M', '2'))
return ffm2_read_header(s);
- if (tag != MKTAG('F', 'F', 'M', '1'))
+ if (tag != MKTAG('F', 'F', 'M', '1')) {
+ ret = AVERROR_INVALIDDATA;
goto fail;
+ }
ffm->packet_size = avio_rb32(pb);
- if (ffm->packet_size != FFM_PACKET_SIZE)
+ if (ffm->packet_size != FFM_PACKET_SIZE) {
+ ret = AVERROR_INVALIDDATA;
goto fail;
+ }
ffm->write_index = avio_rb64(pb);
/* get also filesize */
if (pb->seekable) {
@@ -569,8 +574,10 @@ static int ffm_read_header(AVFormatContext *s)
int flags;
st = avformat_new_stream(s, NULL);
- if (!st)
+ if (!st) {
+ ret = AVERROR(ENOMEM);
goto fail;
+ }
avpriv_set_pts_info(st, 64, 1, 1000000);
@@ -581,6 +588,7 @@ static int ffm_read_header(AVFormatContext *s)
if (!codec_desc) {
av_log(s, AV_LOG_ERROR, "Invalid codec id: %d\n", codecpar->codec_id);
codecpar->codec_id = AV_CODEC_ID_NONE;
+ ret = AVERROR_INVALIDDATA;
goto fail;
}
codecpar->codec_type = avio_r8(pb); /* codec_type */
@@ -589,11 +597,13 @@ static int ffm_read_header(AVFormatContext *s)
codec_desc->type, codecpar->codec_type);
codecpar->codec_id = AV_CODEC_ID_NONE;
codecpar->codec_type = AVMEDIA_TYPE_UNKNOWN;
+ ret = AVERROR_INVALIDDATA;
goto fail;
}
codecpar->bit_rate = avio_rb32(pb);
if (codecpar->bit_rate < 0) {
av_log(s, AV_LOG_WARNING, "Invalid bit rate %"PRId64"\n", codecpar->bit_rate);
+ ret = AVERROR_INVALIDDATA;
goto fail;
}
flags = avio_rb32(pb);
@@ -611,13 +621,14 @@ FF_ENABLE_DEPRECATION_WARNINGS
avio_rb32(pb); // time_base.den
codecpar->width = avio_rb16(pb);
codecpar->height = avio_rb16(pb);
- if (av_image_check_size(codecpar->width, codecpar->height, 0, s) < 0)
+ if ((ret = av_image_check_size(codecpar->width, codecpar->height, 0, s)) < 0)
goto fail;
avio_rb16(pb); // gop_size
codecpar->format = avio_rb32(pb);
if (!av_pix_fmt_desc_get(codecpar->format)) {
av_log(s, AV_LOG_ERROR, "Invalid pix fmt id: %d\n", codecpar->format);
codecpar->format = AV_PIX_FMT_NONE;
+ ret = AVERROR_INVALIDDATA;
goto fail;
}
avio_r8(pb); // qmin
@@ -668,12 +679,14 @@ FF_ENABLE_DEPRECATION_WARNINGS
VALIDATE_PARAMETER(frame_size, "frame size", codecpar->frame_size < 0)
break;
default:
+ ret = AVERROR_INVALIDDATA;
goto fail;
}
if (flags & AV_CODEC_FLAG_GLOBAL_HEADER) {
int size = avio_rb32(pb);
if (size < 0 || size >= FF_MAX_EXTRADATA_SIZE) {
av_log(s, AV_LOG_ERROR, "Invalid extradata size %d\n", size);
+ ret = AVERROR_INVALIDDATA;
goto fail;
}
codecpar->extradata = av_mallocz(size + AV_INPUT_BUFFER_PADDING_SIZE);
@@ -699,7 +712,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
return 0;
fail:
avcodec_free_context(&dummy_codec);
- return -1;
+ return ret;
}
/* return < 0 if eof */
More information about the ffmpeg-cvslog
mailing list