Mercurial > mplayer.hg
diff libmpdemux/parse_mp4.c @ 5303:534f16f50c17
10l fix memory allocation
author | atmos4 |
---|---|
date | Sun, 24 Mar 2002 03:07:18 +0000 |
parents | d72c3169a343 |
children | 77ac28af44ec |
line wrap: on
line diff
--- a/libmpdemux/parse_mp4.c Sun Mar 24 02:38:20 2002 +0000 +++ b/libmpdemux/parse_mp4.c Sun Mar 24 03:07:18 2002 +0000 @@ -13,6 +13,7 @@ #include "stream.h" #define MP4_DL MSGL_V +#define freereturn(a,b) free(a); return b int mp4_read_descr_len(stream_t *s) { uint8_t b; @@ -45,7 +46,7 @@ if (tag == MP4ESDescrTag) { /* read length */ if ((len = mp4_read_descr_len(s)) < 5 + 15) { - return 1; + freereturn(s,1); } esds->ESId = stream_read_word(s); esds->streamPriority = stream_read_char(s); @@ -65,12 +66,12 @@ /* get and verify DecoderConfigDescrTab */ if (stream_read_char(s) != MP4DecConfigDescrTag) { - return 1; + freereturn(s,1); } /* read length */ if ((len = mp4_read_descr_len(s)) < 15) { - return 1; + freereturn(s,1); } esds->objectTypeId = stream_read_char(s); @@ -91,13 +92,12 @@ /* get and verify DecSpecificInfoTag */ if (stream_read_char(s) != MP4DecSpecificDescrTag) { - return 1; + freereturn(s,1); } /* read length */ esds->decoderConfigLen = len = mp4_read_descr_len(s); - free(esds->decoderConfig); esds->decoderConfig = malloc(esds->decoderConfigLen); if (esds->decoderConfig) { stream_read(s, esds->decoderConfig, esds->decoderConfigLen); @@ -108,7 +108,10 @@ "ESDS MPEG4 Decoder Specific Descriptor (%dBytes)\n", len); /* will skip the remainder of the atom */ - return 0; + freereturn(s,0); } +#undef freereturn +#undef MP4_DL +