Fix Connector

This commit is contained in:
Martin 2017-06-26 20:12:15 +02:00
parent d7ba8fb2a5
commit a6ccd467ba
2 changed files with 20 additions and 22 deletions

View File

@ -225,7 +225,7 @@ std::string Connector::getResponse(const std::string &cmd, const std::string &ar
resp=tcpstack.getPacket(&packetsize);
if(packetsize==0)
if(resp==NULL || packetsize==0)
{
busy=false;
return "";
@ -233,9 +233,8 @@ std::string Connector::getResponse(const std::string &cmd, const std::string &ar
}
std::string ret;
ret.resize(packetsize);
memcpy(&ret[0], resp, packetsize);
delete resp;
ret.assign(resp, packetsize);
delete[] resp;
busy=false;

View File

@ -22,7 +22,9 @@
#include "tcpstack.h"
#include <memory.h>
#include "stringtools.h"
const unsigned int max_packet_size = 1 * 1024 * 1024;
void CTCPStack::AddData(char* buf, size_t datasize)
{
@ -58,33 +60,30 @@ size_t CTCPStack::Send(wxSocketBase* p, const std::string &msg)
char* CTCPStack::getPacket(size_t* packetsize)
{
if(buffer.size()>1)
if (buffer.size() >= sizeof(MAX_PACKETSIZE))
{
MAX_PACKETSIZE len;
memcpy(&len, &buffer[0], sizeof(MAX_PACKETSIZE) );
memcpy(&len, &buffer[0], sizeof(MAX_PACKETSIZE));
len = little_endian(len);
if(len==0)
if (len<max_packet_size && buffer.size() >= (size_t)len + sizeof(MAX_PACKETSIZE))
{
*packetsize=0;
buffer.erase(buffer.begin(), buffer.begin()+len+sizeof(MAX_PACKETSIZE));
return NULL;
}
char* buf = new char[len + 1];
if (len>0)
{
memcpy(buf, &buffer[sizeof(MAX_PACKETSIZE)], len);
}
if(buffer.size()>=(size_t)len+sizeof(MAX_PACKETSIZE))
{
char* buf=new char[len+1];
memcpy(buf, &buffer[sizeof(MAX_PACKETSIZE)], len);
(*packetsize) = len;
(*packetsize)=len;
buffer.erase(buffer.begin(), buffer.begin() + len + sizeof(MAX_PACKETSIZE));
buffer.erase(buffer.begin(), buffer.begin()+len+sizeof(MAX_PACKETSIZE));
buf[len]=0;
buf[len] = 0;
return buf;
}
}
*packetsize=-1;
}
*packetsize = 0;
return NULL;
}