[CrytalHD/OpenMax] Fix "Common realloc mistake: 'out' nulled but not freed upon failure".
authorace20022 <ace20022@ymail.com>
Tue, 12 Mar 2013 08:56:20 +0000 (09:56 +0100)
committerace20022 <ace20022@ymail.com>
Fri, 5 Apr 2013 08:32:53 +0000 (10:32 +0200)
xbmc/cores/dvdplayer/DVDCodecs/Video/CrystalHD.cpp
xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecOpenMax.cpp

index 109b58d..e43df3a 100644 (file)
@@ -1869,9 +1869,17 @@ bool CCrystalHD::bitstream_convert_init(void *in_extradata, int in_extrasize)
       free(out);
       return false;
     }
-    out = (uint8_t*)realloc(out, total_size);
-    if (!out)
+    uint8_t* new_out = (uint8_t*)realloc(out, total_size);
+    if (new_out)
+    {
+      out = new_out;
+    }
+    else
+    {
+      CLog::Log(LOGERROR, "bitstream_convert_init failed - %s : could not realloc the buffer out",  __FUNCTION__);
+      free(out);
       return false;
+    }
 
     memcpy(out + total_size - unit_size - 4, nalu_header, 4);
     memcpy(out + total_size - unit_size, extradata + 2, unit_size);
index 6074ba5..c84cf3e 100644 (file)
@@ -235,9 +235,17 @@ bool CDVDVideoCodecOpenMax::bitstream_convert_init(void *in_extradata, int in_ex
       free(out);
       return false;
     }
-    out = (uint8_t*)realloc(out, total_size);
-    if (!out)
+    uint8_t* new_out = (uint8_t*)realloc(out, total_size);
+    if (new_out)
+    {
+      out = new_out;
+    }
+    else
+    {
+      CLog::Log(LOGERROR, "bitstream_convert_init failed - %s : could not realloc the buffer out",  __FUNCTION__);
+      free(out);
       return false;
+    }
 
     memcpy(out + total_size - unit_size - 4, nalu_header, 4);
     memcpy(out + total_size - unit_size, extradata + 2, unit_size);