From aaebc563e8c8911da62f055b46585809fc163a5f Mon Sep 17 00:00:00 2001 From: Thulinma Date: Mon, 12 Mar 2012 15:49:19 +0100 Subject: [PATCH] Fixed several FLV-related server bugs. --- util/flv_tag.cpp | 46 +++++++++++++++++++++++++++++----------------- 1 file changed, 29 insertions(+), 17 deletions(-) diff --git a/util/flv_tag.cpp b/util/flv_tag.cpp index 526de7d0..427b2243 100644 --- a/util/flv_tag.cpp +++ b/util/flv_tag.cpp @@ -320,7 +320,14 @@ bool FLV::Tag::MemLoader(char * D, unsigned int S, unsigned int & P){ len += (data[2] << 8); len += (data[1] << 16); if (buf < len){data = (char*)realloc(data, len); buf = len;} - if (data[0] > 0x12){FLV::Parse_Error = true; Error_Str = "Invalid Tag received."; return false;} + if (data[0] > 0x12){ + data[0] += 32; + FLV::Parse_Error = true; + Error_Str = "Invalid Tag received ("; + Error_Str += data[0]; + Error_Str += ")."; + return false; + } done = false; } } @@ -347,20 +354,11 @@ bool FLV::Tag::MemLoader(char * D, unsigned int S, unsigned int & P){ /// \param sock Socket to read from. /// \return True if count bytes are read succesfully, false otherwise. bool FLV::Tag::SockReadUntil(char * buffer, unsigned int count, unsigned int & sofar, Socket::Connection & sock){ - if (sofar == count){return true;} - if (!sock.read(buffer + sofar,count-sofar)){ - if (errno != EWOULDBLOCK){ - FLV::Parse_Error = true; - Error_Str = "Error reading from socket."; - } - return false; - } - sofar += count-sofar; - if (sofar == count){return true;} - if (sofar > count){ - FLV::Parse_Error = true; - Error_Str = "Socket buffer overflow."; - } + if (sofar >= count){return true;} + int r = 0; + r = sock.iread(buffer + sofar,count-sofar); + sofar += r; + if (sofar >= count){return true;} return false; }//Tag::SockReadUntil @@ -387,7 +385,14 @@ bool FLV::Tag::SockLoader(Socket::Connection sock){ len += (data[2] << 8); len += (data[1] << 16); if (buf < len){data = (char*)realloc(data, len); buf = len;} - if (data[0] > 0x12){FLV::Parse_Error = true; Error_Str = "Invalid Tag received."; return false;} + if (data[0] > 0x12){ + data[0] += 32; + FLV::Parse_Error = true; + Error_Str = "Invalid Tag received ("; + Error_Str += data[0]; + Error_Str += ")."; + return false; + } done = false; } } @@ -459,7 +464,14 @@ bool FLV::Tag::FileLoader(FILE * f){ len += (data[2] << 8); len += (data[1] << 16); if (buf < len){data = (char*)realloc(data, len); buf = len;} - if (data[0] > 0x12){FLV::Parse_Error = true; Error_Str = "Invalid Tag received."; return false;} + if (data[0] > 0x12){ + data[0] += 32; + FLV::Parse_Error = true; + Error_Str = "Invalid Tag received ("; + Error_Str += data[0]; + Error_Str += ")."; + return false; + } done = false; } }