From d480eb05da331822d7e976e78c3373ba0dfa4d8c Mon Sep 17 00:00:00 2001 From: Tomasz Poradowski Date: Wed, 4 Nov 2020 15:19:18 +0100 Subject: [PATCH] rdb: corrected RedisModuleIO initialization point (#8014) - rdbSaveSingleModuleAux() used RedisModuleIO's "bytes" field for tracking written bytes before calling moduleInitIOContext() which sets "bytes" to zero - rdbSaveObject() re-initialized RedisModuleIO too late This return value is not used at the moment since it's only tested against -1, and the actual byte count isn't used yet. Co-authored-by: Tomasz Poradowski --- src/rdb.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/rdb.c b/src/rdb.c index 3ea55fa67..e15984e44 100644 --- a/src/rdb.c +++ b/src/rdb.c @@ -1015,10 +1015,10 @@ ssize_t rdbSaveObject(rio *rdb, robj *o, robj *key) { * to call the right module during loading. */ int retval = rdbSaveLen(rdb,mt->id); if (retval == -1) return -1; + moduleInitIOContext(io,mt,rdb,key); io.bytes += retval; /* Then write the module-specific representation + EOF marker. */ - moduleInitIOContext(io,mt,rdb,key); mt->rdb_save(&io,mv->value); retval = rdbSaveLen(rdb,RDB_MODULE_OPCODE_EOF); if (retval == -1) @@ -1147,6 +1147,7 @@ ssize_t rdbSaveSingleModuleAux(rio *rdb, int when, moduleType *mt) { RedisModuleIO io; int retval = rdbSaveType(rdb, RDB_OPCODE_MODULE_AUX); if (retval == -1) return -1; + moduleInitIOContext(io,mt,rdb,NULL); io.bytes += retval; /* Write the "module" identifier as prefix, so that we'll be able @@ -1166,7 +1167,6 @@ ssize_t rdbSaveSingleModuleAux(rio *rdb, int when, moduleType *mt) { io.bytes += retval; /* Then write the module-specific representation + EOF marker. */ - moduleInitIOContext(io,mt,rdb,NULL); mt->aux_save(&io,when); retval = rdbSaveLen(rdb,RDB_MODULE_OPCODE_EOF); if (retval == -1)