From f7d4c3acdf62d06f35beeec450be3ea7430d4aed Mon Sep 17 00:00:00 2001 From: antirez Date: Wed, 21 Feb 2018 11:17:46 +0100 Subject: [PATCH] Streams: trap more errors in stream loading + RDB check type name. --- src/rdb.c | 8 ++++++++ src/redis-check-rdb.c | 3 ++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/rdb.c b/src/rdb.c index 4097768d6..ff9168ec1 100644 --- a/src/rdb.c +++ b/src/rdb.c @@ -1624,6 +1624,10 @@ robj *rdbLoadObject(int rdbtype, rio *rdb) { * we read more data. */ streamID cg_id; sds cgname = rdbGenericLoadStringObject(rdb,RDB_LOAD_SDS,NULL); + if (cgname == NULL) { + rdbExitReportCorruptRDB( + "Error reading the consumer group name from Stream"); + } cg_id.ms = rdbLoadLen(rdb,NULL); cg_id.seq = rdbLoadLen(rdb,NULL); streamCG *cgroup = streamCreateCG(s,cgname,sdslen(cgname),&cg_id); @@ -1654,6 +1658,10 @@ robj *rdbLoadObject(int rdbtype, rio *rdb) { size_t consumers_num = rdbLoadLen(rdb,NULL); while(consumers_num--) { sds cname = rdbGenericLoadStringObject(rdb,RDB_LOAD_SDS,NULL); + if (cname == NULL) { + rdbExitReportCorruptRDB( + "Error reading the consumer name from Stream group"); + } streamConsumer *consumer = streamLookupConsumer(cgroup,cname, 1); sdsfree(cname); diff --git a/src/redis-check-rdb.c b/src/redis-check-rdb.c index 71ac50d03..5cba89a5a 100644 --- a/src/redis-check-rdb.c +++ b/src/redis-check-rdb.c @@ -85,7 +85,8 @@ char *rdb_type_string[] = { "set-intset", "zset-ziplist", "hash-ziplist", - "quicklist" + "quicklist", + "stream" }; /* Show a few stats collected into 'rdbstate' */