summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHenri Doreau <henri.doreau@cea.fr>2013-01-22 15:53:17 +0100
committerHenri Doreau <henri.doreau@cea.fr>2013-01-22 15:53:17 +0100
commitd7e3268f48b457cb52336d264f8860b336faea9f (patch)
tree320b74c5c6125eea5a088ba75d419098ecb50d10
parent814be4f5bd62b4f66281879b3035a20ad84bb498 (diff)
Prevent AsyncConnect from crashing on memory allocation failures.
-rw-r--r--async.c15
1 files changed, 14 insertions, 1 deletions
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;