summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--hiredis.c5
-rw-r--r--test.c15
2 files changed, 20 insertions, 0 deletions
diff --git a/hiredis.c b/hiredis.c
index 2afee56..78beaae 100644
--- a/hiredis.c
+++ b/hiredis.c
@@ -73,6 +73,9 @@ void freeReplyObject(void *reply) {
redisReply *r = reply;
size_t j;
+ if (r == NULL)
+ return;
+
switch(r->type) {
case REDIS_REPLY_INTEGER:
break; /* Nothing to free */
@@ -1001,6 +1004,8 @@ static redisContext *redisContextInit(void) {
}
void redisFree(redisContext *c) {
+ if (c == NULL)
+ return;
if (c->fd > 0)
close(c->fd);
if (c->obuf != NULL)
diff --git a/test.c b/test.c
index 713cc06..93116bd 100644
--- a/test.c
+++ b/test.c
@@ -318,6 +318,19 @@ static void test_reply_reader(void) {
redisReaderFree(reader);
}
+static void test_free_null(void) {
+ void *redisContext = NULL;
+ void *reply = NULL;
+
+ test("Don't fail when redisFree is passed a NULL value: ");
+ redisFree(redisContext);
+ test_cond(redisContext == NULL);
+
+ test("Don't fail when freeReplyObject is passed a NULL value: ");
+ freeReplyObject(reply);
+ test_cond(reply == NULL);
+}
+
static void test_blocking_connection_errors(void) {
redisContext *c;
@@ -702,6 +715,7 @@ int main(int argc, char **argv) {
test_format_commands();
test_reply_reader();
test_blocking_connection_errors();
+ test_free_null();
printf("\nTesting against TCP connection (%s:%d):\n", cfg.tcp.host, cfg.tcp.port);
cfg.type = CONN_TCP;
@@ -723,6 +737,7 @@ int main(int argc, char **argv) {
test_blocking_connection(cfg);
}
+
if (fails) {
printf("*** %d TESTS FAILED ***\n", fails);
return 1;