mirror of
https://github.com/zeromq/libzmq.git
synced 2024-12-31 01:43:02 +08:00
Fix LIBZMQ-211: REP socket asserting when getting malformed request
REP socket demands at least an empty address stack. The server asserted on (msg_->flags () & msg_t::more) in rep.cpp:75 when receiving a malformed request without empty part. This patch makes a REP socket to discard and silently ignore such malformed requests.
This commit is contained in:
parent
9b58372a38
commit
725f141fd7
24
src/rep.cpp
24
src/rep.cpp
@ -72,12 +72,24 @@ int zmq::rep_t::xrecv (msg_t *msg_, int flags_)
|
||||
int rc = router_t::xrecv (msg_, flags_);
|
||||
if (rc != 0)
|
||||
return rc;
|
||||
zmq_assert (msg_->flags () & msg_t::more);
|
||||
bool bottom = (msg_->size () == 0);
|
||||
rc = router_t::xsend (msg_, flags_);
|
||||
errno_assert (rc == 0);
|
||||
if (bottom)
|
||||
break;
|
||||
|
||||
if ((msg_->flags () & msg_t::more)) {
|
||||
// Empty message part delimits the traceback stack.
|
||||
bool bottom = (msg_->size () == 0);
|
||||
|
||||
// Push it to the reply pipe.
|
||||
rc = router_t::xsend (msg_, flags_);
|
||||
errno_assert (rc == 0);
|
||||
|
||||
if (bottom)
|
||||
break;
|
||||
}
|
||||
else {
|
||||
// If the traceback stack is malformed, discard anything
|
||||
// already sent to pipe (we're at end of invalid message).
|
||||
rc = router_t::rollback ();
|
||||
errno_assert (rc == 0);
|
||||
}
|
||||
}
|
||||
request_begins = false;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user