From a9df633e87a7a33457fa23988e9dc47cd205c4d8 Mon Sep 17 00:00:00 2001
From: Thulinma <jaron@vietors.com>
Date: Thu, 5 Dec 2013 12:39:53 +0100
Subject: [PATCH] More fixes to FLV memory bookkeeping.

---
 lib/flv_tag.cpp | 80 ++++++++++++++++++++++---------------------------
 1 file changed, 36 insertions(+), 44 deletions(-)

diff --git a/lib/flv_tag.cpp b/lib/flv_tag.cpp
index 5dca1ba8..05bf1235 100644
--- a/lib/flv_tag.cpp
+++ b/lib/flv_tag.cpp
@@ -513,17 +513,15 @@ bool FLV::Tag::DTSCVideoInit(DTSC::Track & video){
   if (video.codec == "H264"){
     len = video.init.size() + 20;
   }
-  if (len > 0){
-    if ( !checkBufferSize()){
-      return false;
-    }
-    memcpy(data + 16, video.init.c_str(), len - 20);
-    data[12] = 0; //H264 sequence header
-    data[13] = 0;
-    data[14] = 0;
-    data[15] = 0;
-    data[11] = 0x17; //H264 keyframe (0x07 & 0x10)
+  if (len <= 0 || !checkBufferSize()){
+    return false;
   }
+  memcpy(data + 16, video.init.c_str(), len - 20);
+  data[12] = 0; //H264 sequence header
+  data[13] = 0;
+  data[14] = 0;
+  data[15] = 0;
+  data[11] = 0x17; //H264 keyframe (0x07 & 0x10)
   setLen();
   data[0] = 0x09;
   data[1] = ((len - 15) >> 16) & 0xFF;
@@ -546,34 +544,31 @@ bool FLV::Tag::DTSCAudioInit(DTSC::Track & audio){
   if (audio.codec == "AAC"){
     len = audio.init.size() + 17;
   }
-  if (len > 0){
-    if ( !checkBufferSize()){
-      return false;
-    }
-    memcpy(data + 13, audio.init.c_str(), len - 17);
-    data[12] = 0; //AAC sequence header
-    data[11] = 0;
-    if (audio.codec == "AAC"){
-      data[11] += 0xA0;
-    }
-    if (audio.codec == "MP3"){
-      data[11] += 0x20;
-    }
-    unsigned int datarate = audio.rate;
-    if (datarate >= 44100){
-      data[11] += 0x0C;
-    }else if (datarate >= 22050){
-      data[11] += 0x08;
-    }else if (datarate >= 11025){
-      data[11] += 0x04;
-    }
-    if (audio.size == 16){
-      data[11] += 0x02;
-    }
-    if (audio.channels > 1){
-      data[11] += 0x01;
-
-    }
+  if (len <= 0 || !checkBufferSize()){
+    return false;
+  }
+  memcpy(data + 13, audio.init.c_str(), len - 17);
+  data[12] = 0; //AAC sequence header
+  data[11] = 0;
+  if (audio.codec == "AAC"){
+    data[11] += 0xA0;
+  }
+  if (audio.codec == "MP3"){
+    data[11] += 0x20;
+  }
+  unsigned int datarate = audio.rate;
+  if (datarate >= 44100){
+    data[11] += 0x0C;
+  }else if (datarate >= 22050){
+    data[11] += 0x08;
+  }else if (datarate >= 11025){
+    data[11] += 0x04;
+  }
+  if (audio.size == 16){
+    data[11] += 0x02;
+  }
+  if (audio.channels > 1){
+    data[11] += 0x01;
   }
   setLen();
   data[0] = 0x08;
@@ -689,13 +684,10 @@ bool FLV::Tag::DTSCMetaInit(DTSC::Stream & S, DTSC::Track & videoRef, DTSC::Trac
 
   std::string tmp = amfdata.Pack();
   len = tmp.length() + 15;
-  if (len > 0){
-    if (checkBufferSize()){
-      memcpy(data + 11, tmp.c_str(), len - 15);
-    }else{
-      return false;
-    }
+  if (len <= 0 || checkBufferSize()){
+    return false;
   }
+  memcpy(data + 11, tmp.c_str(), len - 15);
   setLen();
   data[0] = 0x12;
   data[1] = ((len - 15) >> 16) & 0xFF;