fix(rpc): assertion failure due to invalid msgpack input

Problem:
  rbuffer_consumed assertion fails if Unpacker fails to parse msgpack,
  because it doesn't consume bytes on errors

Solution:
  Call rbuffer_consumed_compact only if Unpacker isn't closed
This commit is contained in:
nwounkn
2023-08-16 04:33:39 +05:00
committed by Lewis Russell
parent f8310beeed
commit 4d4092ac9e
2 changed files with 43 additions and 3 deletions

View File

@@ -304,8 +304,11 @@ static void receive_msgpack(Stream *stream, RBuffer *rbuf, size_t c, void *data,
p->read_ptr = rbuffer_read_ptr(rbuf, &size);
p->read_size = size;
parse_msgpack(channel);
size_t consumed = size - p->read_size;
rbuffer_consumed_compact(rbuf, consumed);
if (!unpacker_closed(p)) {
size_t consumed = size - p->read_size;
rbuffer_consumed_compact(rbuf, consumed);
}
end:
channel_decref(channel);