mirror of https://git.ffmpeg.org/ffmpeg.git
avformat/libquvi: fix error handling
avoid calling cleanup functions on uninitialized variables Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
3ad3529b56
commit
d61386a690
|
@ -63,28 +63,41 @@ static int libquvi_read_header(AVFormatContext *s)
|
||||||
char *media_url, *pagetitle;
|
char *media_url, *pagetitle;
|
||||||
|
|
||||||
rc = quvi_init(&q);
|
rc = quvi_init(&q);
|
||||||
if (rc != QUVI_OK)
|
if (rc != QUVI_OK) {
|
||||||
goto quvi_fail;
|
av_log(s, AV_LOG_ERROR, "%s\n", quvi_strerror(q, rc));
|
||||||
|
return AVERROR_EXTERNAL;
|
||||||
|
}
|
||||||
|
|
||||||
quvi_setopt(q, QUVIOPT_FORMAT, qc->format);
|
quvi_setopt(q, QUVIOPT_FORMAT, qc->format);
|
||||||
|
|
||||||
rc = quvi_parse(q, s->filename, &m);
|
rc = quvi_parse(q, s->filename, &m);
|
||||||
if (rc != QUVI_OK)
|
if (rc != QUVI_OK) {
|
||||||
goto quvi_fail;
|
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);
|
rc = quvi_getprop(m, QUVIPROP_MEDIAURL, &media_url);
|
||||||
if (rc != QUVI_OK)
|
if (rc != QUVI_OK) {
|
||||||
goto quvi_fail;
|
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()))
|
if (!(qc->fmtctx = avformat_alloc_context())) {
|
||||||
goto quvi_fail;
|
ret = AVERROR(ENOMEM);
|
||||||
|
goto err_quvi_cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
if ((ret = ff_copy_whitelists(qc->fmtctx, s)) < 0)
|
if ((ret = ff_copy_whitelists(qc->fmtctx, s)) < 0) {
|
||||||
goto end;
|
avformat_free_context(qc->fmtctx);
|
||||||
|
qc->fmtctx = NULL;
|
||||||
|
goto err_quvi_cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
ret = avformat_open_input(&qc->fmtctx, media_url, NULL, NULL);
|
ret = avformat_open_input(&qc->fmtctx, media_url, NULL, NULL);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto end;
|
goto err_quvi_cleanup;
|
||||||
|
|
||||||
rc = quvi_getprop(m, QUVIPROP_PAGETITLE, &pagetitle);
|
rc = quvi_getprop(m, QUVIPROP_PAGETITLE, &pagetitle);
|
||||||
if (rc == QUVI_OK)
|
if (rc == QUVI_OK)
|
||||||
|
@ -95,7 +108,7 @@ static int libquvi_read_header(AVFormatContext *s)
|
||||||
AVStream *ist = qc->fmtctx->streams[i];
|
AVStream *ist = qc->fmtctx->streams[i];
|
||||||
if (!st) {
|
if (!st) {
|
||||||
ret = AVERROR(ENOMEM);
|
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);
|
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);
|
avcodec_copy_context(st->codec, qc->fmtctx->streams[i]->codec);
|
||||||
|
@ -103,12 +116,11 @@ static int libquvi_read_header(AVFormatContext *s)
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
quvi_fail:
|
err_close_input:
|
||||||
av_log(s, AV_LOG_ERROR, "%s\n", quvi_strerror(q, rc));
|
avformat_close_input(&qc->fmtctx);
|
||||||
ret = AVERROR_EXTERNAL;
|
err_quvi_cleanup:
|
||||||
|
|
||||||
end:
|
|
||||||
quvi_parse_close(&m);
|
quvi_parse_close(&m);
|
||||||
|
err_quvi_close:
|
||||||
quvi_close(&q);
|
quvi_close(&q);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue