]> git.saurik.com Git - redis.git/commit - src/networking.c
Fix c->reply_bytes computation in setDeferredMultiBulkLength()
authorantirez <antirez@gmail.com>
Fri, 15 Jun 2012 08:03:25 +0000 (10:03 +0200)
committerantirez <antirez@gmail.com>
Fri, 15 Jun 2012 08:03:25 +0000 (10:03 +0200)
commit5b63ccce6c5a3b2097c87cc1b6af314c209172ef
tree1c7e0c73a02123018b7a6266b8575499ffac4f52
parentba779119b8b08294cdb776302638ee5b7b9b5b84
Fix c->reply_bytes computation in setDeferredMultiBulkLength()

In order to implement reply buffer limits introduced in 2.6 and useful
to close the connection under user-selected circumastances of big output
buffers (for instance slow consumers in pub/sub, a blocked slave, and so
forth) Redis takes a counter with the amount of used memory in objects
inside the output list stored into c->reply.

The computation was broken in the function setDeferredMultiBulkLength(),
in the case the object was glued with the next one. This caused the
c->reply_bytes field to go out of sync, be subtracted more than needed,
and wrap back near to ULONG_MAX values.

This commit fixes this bug and adds an assertion that is able to trap
this class of problems.

This problem was discovered looking at the INFO output of an unrelated
issue (issue #547).
src/networking.c