From f70e88c1f6e2c7db676ea39dfa323d7c613df787 Mon Sep 17 00:00:00 2001 From: antirez Date: Tue, 12 Jun 2018 17:21:57 +0200 Subject: [PATCH] RDB: store times consistently in little endian. I'm not sure how this escaped the attention of Redis users for years, but finally @oranagra reported this issue... Thanks to Oran. --- src/rdb.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/rdb.c b/src/rdb.c index 5ec06f9a..7d5fd5fc 100644 --- a/src/rdb.c +++ b/src/rdb.c @@ -100,6 +100,9 @@ int rdbLoadType(rio *rdb) { return type; } +/* This is only used to load old databases stored with the RDB_OPCODE_EXPIRETIME + * opcode. New versions of Redis store using the RDB_OPCODE_EXPIRETIME_MS + * opcode. */ time_t rdbLoadTime(rio *rdb) { int32_t t32; rdbLoadRaw(rdb,&t32,4); @@ -108,12 +111,14 @@ time_t rdbLoadTime(rio *rdb) { int rdbSaveMillisecondTime(rio *rdb, long long t) { int64_t t64 = (int64_t) t; + memrev64ifbe(&t64); /* Store in little endian. */ return rdbWriteRaw(rdb,&t64,8); } long long rdbLoadMillisecondTime(rio *rdb) { int64_t t64; rdbLoadRaw(rdb,&t64,8); + memrev64ifbe(&t64); /* Convert in big endian if the system is BE. */ return (long long)t64; }