mirror of
https://github.com/fluencelabs/redis
synced 2025-03-17 16:10:50 +00:00
Fix rdbSaveKeyValuePair() integer overflow.
Again thanks to @oranagra. The object idle time does not fit into an int sometimes: use the native type that the serialization function will get as argument, which is uint64_t.
This commit is contained in:
parent
e534e9aa83
commit
b38682199b
@ -993,8 +993,7 @@ size_t rdbSavedObjectLen(robj *o) {
|
||||
* On error -1 is returned.
|
||||
* On success if the key was actually saved 1 is returned, otherwise 0
|
||||
* is returned (the key was already expired). */
|
||||
int rdbSaveKeyValuePair(rio *rdb, robj *key, robj *val, long long expiretime)
|
||||
{
|
||||
int rdbSaveKeyValuePair(rio *rdb, robj *key, robj *val, long long expiretime) {
|
||||
int savelru = server.maxmemory_policy & MAXMEMORY_FLAG_LRU;
|
||||
int savelfu = server.maxmemory_policy & MAXMEMORY_FLAG_LFU;
|
||||
|
||||
@ -1006,7 +1005,7 @@ int rdbSaveKeyValuePair(rio *rdb, robj *key, robj *val, long long expiretime)
|
||||
|
||||
/* Save the LRU info. */
|
||||
if (savelru) {
|
||||
int idletime = estimateObjectIdleTime(val);
|
||||
uint64_t idletime = estimateObjectIdleTime(val);
|
||||
idletime /= 1000; /* Using seconds is enough and requires less space.*/
|
||||
if (rdbSaveType(rdb,RDB_OPCODE_IDLE) == -1) return -1;
|
||||
if (rdbSaveLen(rdb,idletime) == -1) return -1;
|
||||
|
Loading…
x
Reference in New Issue
Block a user