summaryrefslogtreecommitdiff
path: root/libavformat/libquvi.c
diff options
context:
space:
mode:
authorGilles Chanteperdrix <gilles.chanteperdrix@xenomai.org>2015-04-08 19:16:36 +0200
committerMichael Niedermayer <michaelni@gmx.at>2015-05-31 19:04:52 +0200
commitd61386a69002be2cff212b03b51411dd294a7a22 (patch)
treeb5b26b8fc6066a552544efee549172d9098081f9 /libavformat/libquvi.c
parent3ad3529b567e04a812c0ff103855ecba3efff900 (diff)
avformat/libquvi: fix error handling
avoid calling cleanup functions on uninitialized variables Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavformat/libquvi.c')
-rw-r--r--libavformat/libquvi.c46
1 files changed, 29 insertions, 17 deletions
diff --git a/libavformat/libquvi.c b/libavformat/libquvi.c
index 7c5f7a29b7..7151694542 100644
--- a/libavformat/libquvi.c
+++ b/libavformat/libquvi.c
@@ -63,28 +63,41 @@ static int libquvi_read_header(AVFormatContext *s)
char *media_url, *pagetitle;
rc = quvi_init(&q);
- if (rc != QUVI_OK)
- goto quvi_fail;
+ if (rc != QUVI_OK) {
+ av_log(s, AV_LOG_ERROR, "%s\n", quvi_strerror(q, rc));
+ return AVERROR_EXTERNAL;
+ }
quvi_setopt(q, QUVIOPT_FORMAT, qc->format);
rc = quvi_parse(q, s->filename, &m);
- if (rc != QUVI_OK)
- goto quvi_fail;
+ if (rc != QUVI_OK) {
+ av_log(s, AV_LOG_ERROR, "%s\n", quvi_strerror(q, rc));
+ ret = AVERROR_EXTERNAL;
+ goto err_quvi_close;
+ }
rc = quvi_getprop(m, QUVIPROP_MEDIAURL, &media_url);
- if (rc != QUVI_OK)
- goto quvi_fail;
+ if (rc != QUVI_OK) {
+ av_log(s, AV_LOG_ERROR, "%s\n", quvi_strerror(q, rc));
+ ret = AVERROR_EXTERNAL;
+ goto err_quvi_cleanup;
+ }
- if (!(qc->fmtctx = avformat_alloc_context()))
- goto quvi_fail;
+ if (!(qc->fmtctx = avformat_alloc_context())) {
+ ret = AVERROR(ENOMEM);
+ goto err_quvi_cleanup;
+ }
- if ((ret = ff_copy_whitelists(qc->fmtctx, s)) < 0)
- goto end;
+ if ((ret = ff_copy_whitelists(qc->fmtctx, s)) < 0) {
+ avformat_free_context(qc->fmtctx);
+ qc->fmtctx = NULL;
+ goto err_quvi_cleanup;
+ }
ret = avformat_open_input(&qc->fmtctx, media_url, NULL, NULL);
if (ret < 0)
- goto end;
+ goto err_quvi_cleanup;
rc = quvi_getprop(m, QUVIPROP_PAGETITLE, &pagetitle);
if (rc == QUVI_OK)
@@ -95,7 +108,7 @@ static int libquvi_read_header(AVFormatContext *s)
AVStream *ist = qc->fmtctx->streams[i];
if (!st) {
ret = AVERROR(ENOMEM);
- goto end;
+ goto err_close_input;
}
avpriv_set_pts_info(st, ist->pts_wrap_bits, ist->time_base.num, ist->time_base.den);
avcodec_copy_context(st->codec, qc->fmtctx->streams[i]->codec);
@@ -103,12 +116,11 @@ static int libquvi_read_header(AVFormatContext *s)
return 0;
-quvi_fail:
- av_log(s, AV_LOG_ERROR, "%s\n", quvi_strerror(q, rc));
- ret = AVERROR_EXTERNAL;
-
-end:
+ err_close_input:
+ avformat_close_input(&qc->fmtctx);
+ err_quvi_cleanup:
quvi_parse_close(&m);
+ err_quvi_close:
quvi_close(&q);
return ret;
}