From 67299b0eea9359b02b2b7fabdea3bf68409b5fe1 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 5 Sep 2013 17:54:37 -0700 Subject: [PATCH] fix some memory management stupidity for Assignments --- libraries/shared/src/Assignment.cpp | 24 ++++++++++++++++++++++++ libraries/shared/src/Assignment.h | 1 + 2 files changed, 25 insertions(+) diff --git a/libraries/shared/src/Assignment.cpp b/libraries/shared/src/Assignment.cpp index efbebb12d4..d682a648fe 100644 --- a/libraries/shared/src/Assignment.cpp +++ b/libraries/shared/src/Assignment.cpp @@ -70,6 +70,30 @@ Assignment::Assignment(const unsigned char* dataBuffer, int numBytes) : } } +Assignment::Assignment(const Assignment& assignment) : + _pool(NULL), + _domainSocket(NULL) +{ + _direction = assignment._direction; + _type = assignment._type; + + if (assignment._pool) { + _pool = new char[strlen(assignment._pool)]; + strcpy(_pool, assignment._pool); + } + + if (assignment._domainSocket) { + if (assignment._domainSocket->sa_family == AF_INET) { + _domainSocket = (sockaddr*) new sockaddr_in; + memcpy(_domainSocket, assignment._domainSocket, sizeof(sockaddr_in)); + } else { + _domainSocket = (sockaddr*) new sockaddr_in6; + memcpy(_domainSocket, assignment._domainSocket, sizeof(sockaddr_in6)); + } + } + +} + Assignment::~Assignment() { delete _domainSocket; delete _pool; diff --git a/libraries/shared/src/Assignment.h b/libraries/shared/src/Assignment.h index 866af6a88a..e6f02c78e3 100644 --- a/libraries/shared/src/Assignment.h +++ b/libraries/shared/src/Assignment.h @@ -28,6 +28,7 @@ public: Assignment(Assignment::Direction direction, Assignment::Type type, const char* pool = NULL); Assignment(const unsigned char* dataBuffer, int numBytes); + Assignment(const Assignment& assignment); ~Assignment(); Assignment::Direction getDirection() const { return _direction; }