summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--hiredis.c9
-rw-r--r--test.c5
2 files changed, 12 insertions, 2 deletions
diff --git a/hiredis.c b/hiredis.c
index c461131..8e438f2 100644
--- a/hiredis.c
+++ b/hiredis.c
@@ -945,8 +945,13 @@ int redisGetReply(redisContext *c, void **reply) {
} while (aux == NULL);
}
- /* Set reply object */
- if (reply != NULL) *reply = aux;
+ /* Set reply or free it if we were passed NULL */
+ if (reply != NULL) {
+ *reply = aux;
+ } else {
+ freeReplyObject(aux);
+ }
+
return REDIS_OK;
}
diff --git a/test.c b/test.c
index de06973..9c0de6d 100644
--- a/test.c
+++ b/test.c
@@ -591,6 +591,11 @@ static void test_blocking_connection(struct config config) {
strcasecmp(reply->element[1]->str,"pong") == 0);
freeReplyObject(reply);
+ /* Make sure passing NULL to redisGetReply is safe */
+ test("Can pass NULL to redisGetReply: ");
+ assert(redisAppendCommand(c, "PING") == REDIS_OK);
+ test_cond(redisGetReply(c, NULL) == REDIS_OK);
+
disconnect(c, 0);
}