diff options
author | Rafi Einstein <rafi@redislabs.com> | 2021-10-31 15:59:48 +0200 |
---|---|---|
committer | Oran Agra <oran@redislabs.com> | 2022-04-27 16:31:52 +0300 |
commit | 19c2b179c785b68c0dcfb0b3ae55509ff30cede1 (patch) | |
tree | 5285a76cedd6f72d5af4acf006b4e5fd855b8ee0 | |
parent | 3ba7c6acbec7db07f3294a49f51ac9985ea21c84 (diff) | |
download | redis-19c2b179c785b68c0dcfb0b3ae55509ff30cede1.tar.gz |
Fix memory leak when there's a read error of module aux data from rdb. (#9705)
(cherry picked from commit 734cde7e3885bf4ba8120ca0cc07354851bb4db0)
-rw-r--r-- | src/rdb.c | 11 |
1 files changed, 6 insertions, 5 deletions
@@ -2600,15 +2600,16 @@ int rdbLoadRio(rio *rdb, int rdbflags, rdbSaveInfo *rsi) { io.ver = 2; /* Call the rdb_load method of the module providing the 10 bit * encoding version in the lower 10 bits of the module ID. */ - if (mt->aux_load(&io,moduleid&1023, when) != REDISMODULE_OK || io.error) { - moduleTypeNameByID(name,moduleid); - serverLog(LL_WARNING,"The RDB file contains module AUX data for the module type '%s', that the responsible module is not able to load. Check for modules log above for additional clues.", name); - goto eoferr; - } + int rc = mt->aux_load(&io,moduleid&1023, when); if (io.ctx) { moduleFreeContext(io.ctx); zfree(io.ctx); } + if (rc != REDISMODULE_OK || io.error) { + moduleTypeNameByID(name,moduleid); + serverLog(LL_WARNING,"The RDB file contains module AUX data for the module type '%s', that the responsible module is not able to load. Check for modules log above for additional clues.", name); + goto eoferr; + } uint64_t eof = rdbLoadLen(rdb,NULL); if (eof != RDB_MODULE_OPCODE_EOF) { serverLog(LL_WARNING,"The RDB file contains module AUX data for the module '%s' that is not terminated by the proper module value EOF marker", name); |