summaryrefslogtreecommitdiff
path: root/src/zmq_encoder.cpp
diff options
context:
space:
mode:
authorMartin Sustrik <sustrik@250bpm.com>2010-02-16 18:30:38 +0100
committerMartin Sustrik <sustrik@250bpm.com>2010-02-16 18:30:38 +0100
commitb9caa319e279cd8cd367e0a64308b9e80c4ead3d (patch)
tree751d1eb31b0e41bf82f51ad3be69e13a2af70472 /src/zmq_encoder.cpp
parent2ddce205350f11dacd8d8550f7d4e6e088c7fbcd (diff)
Multi-hop REQ/REP, part XI., finalise the XREQ/XREP functionality
Diffstat (limited to 'src/zmq_encoder.cpp')
-rw-r--r--src/zmq_encoder.cpp15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/zmq_encoder.cpp b/src/zmq_encoder.cpp
index a60fe5e..5fca182 100644
--- a/src/zmq_encoder.cpp
+++ b/src/zmq_encoder.cpp
@@ -56,8 +56,9 @@ bool zmq::zmq_encoder_t::size_ready ()
}
else {
size_t prefix_size = *(unsigned char*) zmq_msg_data (&in_progress);
- next_step ((unsigned char*) zmq_msg_data (&in_progress) + prefix_size,
- zmq_msg_size (&in_progress) - prefix_size,
+ next_step (
+ (unsigned char*) zmq_msg_data (&in_progress) + prefix_size + 1,
+ zmq_msg_size (&in_progress) - prefix_size - 1,
&zmq_encoder_t::message_ready, false);
}
return true;
@@ -80,8 +81,14 @@ bool zmq::zmq_encoder_t::message_ready ()
// Get the message size. If the prefix is not to be sent, adjust the
// size accordingly.
size_t size = zmq_msg_size (&in_progress);
- if (trim)
- size -= *(unsigned char*) zmq_msg_data (&in_progress);
+ if (trim) {
+ zmq_assert (size);
+ size_t prefix_size =
+ (*(unsigned char*) zmq_msg_data (&in_progress)) + 1;
+ zmq_assert (prefix_size <= size);
+ size -= prefix_size;
+ }
+
// For messages less than 255 bytes long, write one byte of message size.
// For longer messages write 0xff escape character followed by 8-byte