From d7e3268f48b457cb52336d264f8860b336faea9f Mon Sep 17 00:00:00 2001 From: Henri Doreau Date: Tue, 22 Jan 2013 15:53:17 +0100 Subject: Prevent AsyncConnect from crashing on memory allocation failures. --- async.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/async.c b/async.c index b302d82..83d88ec 100644 --- a/async.c +++ b/async.c @@ -102,7 +102,12 @@ static dictType callbackDict = { }; static redisAsyncContext *redisAsyncInitialize(redisContext *c) { - redisAsyncContext *ac = realloc(c,sizeof(redisAsyncContext)); + redisAsyncContext *ac; + + ac = realloc(c,sizeof(redisAsyncContext)); + if (ac == NULL) + return NULL; + c = &(ac->c); /* The regular connect functions will always set the flag REDIS_CONNECTED. @@ -150,6 +155,11 @@ redisAsyncContext *redisAsyncConnect(const char *ip, int port) { return NULL; ac = redisAsyncInitialize(c); + if (ac == NULL) { + redisFree(c); + return NULL; + } + __redisAsyncCopyError(ac); return ac; } @@ -194,6 +204,9 @@ static int __redisPushCallback(redisCallbackList *list, redisCallback *source) { /* Copy callback from stack to heap */ cb = malloc(sizeof(*cb)); + if (cb == NULL) + return REDIS_ERR_OOM; + if (source != NULL) { memcpy(cb,source,sizeof(*cb)); cb->next = NULL; -- cgit v1.2.3