diff --git a/libavformat/asf.c b/libavformat/asf.c index 040ac7c6b201f8f11ce98f4dc00ed92d3edd85bf..df2003ad0b8fb2dc8cab0c2a673540406a472438 100644 --- a/libavformat/asf.c +++ b/libavformat/asf.c @@ -156,7 +156,7 @@ static int asf_read_header(AVFormatContext *s, AVFormatParameters *ap) get_guid(pb, &g); if (memcmp(&g, &asf_header, sizeof(GUID))) - goto fail; + return -1; get_le64(pb); get_le32(pb); get_byte(pb); @@ -181,7 +181,7 @@ static int asf_read_header(AVFormatContext *s, AVFormatParameters *ap) break; } if (gsize < 24) - goto fail; + return -1; if (!memcmp(&g, &file_header, sizeof(GUID))) { get_guid(pb, &asf->hdr.guid); asf->hdr.file_size = get_le64(pb); @@ -207,11 +207,11 @@ static int asf_read_header(AVFormatContext *s, AVFormatParameters *ap) st = av_new_stream(s, 0); if (!st) - goto fail; + return AVERROR(ENOMEM); av_set_pts_info(st, 32, 1, 1000); /* 32 bit pts in ms */ asf_st = av_mallocz(sizeof(ASFStream)); if (!asf_st) - goto fail; + return AVERROR(ENOMEM); st->priv_data = asf_st; start_time = asf->hdr.preroll; @@ -232,7 +232,7 @@ static int asf_read_header(AVFormatContext *s, AVFormatParameters *ap) test_for_ext_stream_audio = 1; type = CODEC_TYPE_UNKNOWN; } else { - goto fail; + return -1; } get_guid(pb, &g); total_size = get_le64(pb); @@ -513,7 +513,7 @@ static int asf_read_header(AVFormatContext *s, AVFormatParameters *ap) } #endif } else if (url_feof(pb)) { - goto fail; + return -1; } else { url_fseek(pb, gsize - 24, SEEK_CUR); } @@ -523,7 +523,7 @@ static int asf_read_header(AVFormatContext *s, AVFormatParameters *ap) get_byte(pb); get_byte(pb); if (url_feof(pb)) - goto fail; + return -1; asf->data_offset = url_ftell(pb); asf->packet_size_left = 0; @@ -543,17 +543,6 @@ static int asf_read_header(AVFormatContext *s, AVFormatParameters *ap) } return 0; - - fail: - for(i=0;i<s->nb_streams;i++) { - AVStream *st = s->streams[i]; - if (st) { - av_free(st->priv_data); - av_free(st->codec->extradata); - } - av_free(st); - } - return -1; } #define DO_2BITS(bits, var, defval) \ diff --git a/libavformat/avidec.c b/libavformat/avidec.c index d88d475dee6246b7ee15100b55c5213950c3f51f..38561a8f94dc18ccb35766702357e5e201560b19 100644 --- a/libavformat/avidec.c +++ b/libavformat/avidec.c @@ -597,10 +597,6 @@ static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap) /* check stream number */ if (stream_index != s->nb_streams - 1) { fail: - for(i=0;i<s->nb_streams;i++) { - av_freep(&s->streams[i]->codec->extradata); - av_freep(&s->streams[i]); - } return -1; } diff --git a/libavformat/rmdec.c b/libavformat/rmdec.c index 128e3a2a9bffb41e6fd56b65a5482adf55e3bfbd..502b1f4e221918df84920a9832330ff576ab099f 100644 --- a/libavformat/rmdec.c +++ b/libavformat/rmdec.c @@ -297,7 +297,7 @@ static int rm_read_header(AVFormatContext *s, AVFormatParameters *ap) for(;;) { if (url_feof(pb)) - goto fail; + return -1; tag = get_le32(pb); tag_size = get_be32(pb); get_be16(pb); @@ -311,7 +311,7 @@ static int rm_read_header(AVFormatContext *s, AVFormatParameters *ap) tag_size); #endif if (tag_size < 10 && tag != MKTAG('D', 'A', 'T', 'A')) - goto fail; + return -1; switch(tag) { case MKTAG('P', 'R', 'O', 'P'): /* file header */ @@ -336,7 +336,7 @@ static int rm_read_header(AVFormatContext *s, AVFormatParameters *ap) case MKTAG('M', 'D', 'P', 'R'): st = av_new_stream(s, 0); if (!st) - goto fail; + return AVERROR(ENOMEM); st->id = get_be16(pb); get_be32(pb); /* max bit rate */ st->codec->bit_rate = get_be32(pb); /* bit rate */ @@ -369,12 +369,6 @@ static int rm_read_header(AVFormatContext *s, AVFormatParameters *ap) get_be32(pb); /* next data header */ rm->curpic_num = -1; return 0; - - fail: - for(i=0;i<s->nb_streams;i++) { - av_free(s->streams[i]); - } - return AVERROR(EIO); } static int get_num(ByteIOContext *pb, int *len) diff --git a/libavformat/utils.c b/libavformat/utils.c index e8cd86bcbc527438ec461348cf9cad1a02f2e2a5..e2eb1b0c9467e78085927af887b921b39cfb23e3 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -405,7 +405,16 @@ int av_open_input_stream(AVFormatContext **ic_ptr, return 0; fail: if (ic) { + int i; av_freep(&ic->priv_data); + for(i=0;i<ic->nb_streams;i++) { + AVStream *st = ic->streams[i]; + if (st) { + av_free(st->priv_data); + av_free(st->codec->extradata); + } + av_free(st); + } } av_free(ic); *ic_ptr = NULL;