Skip to content

Commit

Permalink
Fix memory leak in async spontaneous reply handling
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
antirez committed Apr 28, 2015
1 parent d8145d7 commit 2fc39eb
Showing 1 changed file with 1 addition and 0 deletions.
1 change: 1 addition & 0 deletions async.c
Original file line number Diff line number Diff line change
Expand Up @@ -454,6 +454,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 2fc39eb

Please sign in to comment.