Skip to content

Commit

Permalink
Fix Sentinel memory leak (hiredis bug)
Browse files Browse the repository at this point in the history
This fixes issue redis#2535, that was actually an hiredis library bug (I
submitted an issue and fix to the redis/hiredis repo as well).

When an asynchronous hiredis connection subscribes to a Pub/Sub channel
and gets an error, and in other related conditions, the function
redisProcessCallbacks() enters a code path where the link is
disconnected, however the function returns before freeing the allocated
reply object. This causes a memory leak. The memory leak was trivial to
trigger in Redis Sentinel, which uses hiredis, every time we tried to
subscribe to an instance that required a password, in case the Sentinel
was configured either with the wrong password or without password at
all. In this case, the -AUTH error caused the leaking code path to be
executed.

It was verified with Valgrind that after this change the leak no longer
happens in Sentinel with a misconfigured authentication password.
  • Loading branch information
antirez committed Apr 28, 2015
1 parent 7ff051f commit 315e3b1
Showing 1 changed file with 1 addition and 0 deletions.
1 change: 1 addition & 0 deletions deps/hiredis/async.c
Original file line number Diff line number Diff line change
Expand Up @@ -443,6 +443,7 @@ void redisProcessCallbacks(redisAsyncContext *ac) {
if (((redisReply*)reply)->type == REDIS_REPLY_ERROR) {
c->err = REDIS_ERR_OTHER;
snprintf(c->errstr,sizeof(c->errstr),"%s",((redisReply*)reply)->str);
c->reader->fn->freeObject(reply);
__redisAsyncDisconnect(ac);
return;
}
Expand Down

0 comments on commit 315e3b1

Please sign in to comment.