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
+