[LIBZMQ-450] Copy the stream engine endpoint - string reference caused memory corruption

This commit is contained in:
Lourens Naudé 2012-11-16 17:21:07 +00:00
parent bef9a41bdb
commit fdf162a117
2 changed files with 5 additions and 3 deletions

View File

@ -63,7 +63,6 @@ zmq::stream_engine_t::stream_engine_t (fd_t fd_, const options_t &options_, cons
greeting_bytes_read (0),
session (NULL),
options (options_),
endpoint (endpoint_),
plugged (false),
socket (NULL)
{
@ -96,6 +95,8 @@ zmq::stream_engine_t::stream_engine_t (fd_t fd_, const options_t &options_, cons
int rc = setsockopt (s, SOL_SOCKET, SO_NOSIGPIPE, &set, sizeof (int));
errno_assert (rc == 0);
#endif
endpoint = new char[endpoint_.length() + 1];
strcpy (endpoint, endpoint_.c_str());
}
zmq::stream_engine_t::~stream_engine_t ()
@ -117,6 +118,7 @@ zmq::stream_engine_t::~stream_engine_t ()
delete encoder;
if (decoder != NULL)
delete decoder;
delete [] endpoint;
}
void zmq::stream_engine_t::plug (io_thread_t *io_thread_,
@ -484,7 +486,7 @@ int zmq::stream_engine_t::push_msg (msg_t *msg_)
void zmq::stream_engine_t::error ()
{
zmq_assert (session);
socket->event_disconnected (endpoint.c_str(), s);
socket->event_disconnected (endpoint, s);
session->detach ();
unplug ();
delete this;

View File

@ -132,7 +132,7 @@ namespace zmq
options_t options;
// String representation of endpoint
std::string endpoint;
char *endpoint;
bool plugged;