Mercurial > libavformat.hg
changeset 3486:f68fcc8b8e9e libavformat
factorize read_header failure freeing code
author | bcoudurier |
---|---|
date | Fri, 20 Jun 2008 17:16:56 +0000 |
parents | 99565673f94c |
children | 2f191d610db9 |
files | asf.c avidec.c rmdec.c utils.c |
diffstat | 4 files changed, 19 insertions(+), 31 deletions(-) [+] |
line wrap: on
line diff
--- a/asf.c Fri Jun 20 07:27:44 2008 +0000 +++ b/asf.c Fri Jun 20 17:16:56 2008 +0000 @@ -156,7 +156,7 @@ 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 @@ 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 @@ 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 @@ 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 @@ } #endif } else if (url_feof(pb)) { - goto fail; + return -1; } else { url_fseek(pb, gsize - 24, SEEK_CUR); } @@ -523,7 +523,7 @@ 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 @@ } 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) \
--- a/avidec.c Fri Jun 20 07:27:44 2008 +0000 +++ b/avidec.c Fri Jun 20 17:16:56 2008 +0000 @@ -597,10 +597,6 @@ /* 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; }
--- a/rmdec.c Fri Jun 20 07:27:44 2008 +0000 +++ b/rmdec.c Fri Jun 20 17:16:56 2008 +0000 @@ -297,7 +297,7 @@ 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 @@ 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 @@ 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 @@ 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)
--- a/utils.c Fri Jun 20 07:27:44 2008 +0000 +++ b/utils.c Fri Jun 20 17:16:56 2008 +0000 @@ -405,7 +405,16 @@ 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;