Skip to content

Commit a5488b9

Browse files
committed
fix UAF in scan mode
1 parent d95a5a0 commit a5488b9

1 file changed

Lines changed: 2 additions & 2 deletions

File tree

src/scan_algorithm.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,7 @@ void passiveExpire(RedisModuleCtx *ctx, int dbid, RedisModuleString *key) {
239239
start_index = 0;
240240
ln = tair_hash_obj->expire_index->header->level[0].forward;
241241
while (ln && keys_per_loop) {
242+
m_zskiplistNode *next = ln->level[0].forward;
242243
field = ln->member;
243244
if (fieldExpireIfNeeded(ctx, dbid, key, tair_hash_obj, field, 0)) {
244245
g_expire_algorithm.stat_passive_expired_field[dbid]++;
@@ -250,7 +251,7 @@ void passiveExpire(RedisModuleCtx *ctx, int dbid, RedisModuleString *key) {
250251
} else {
251252
break;
252253
}
253-
ln = ln->level[0].forward;
254+
ln = next;
254255
}
255256

256257
if (may_delkey) {
@@ -265,7 +266,6 @@ void passiveExpire(RedisModuleCtx *ctx, int dbid, RedisModuleString *key) {
265266
}
266267

267268
if (start_index) {
268-
m_zslDeleteRangeByRank(tair_hash_obj->expire_index, 1, start_index);
269269
delEmptyTairHashIfNeeded(ctx, NULL, key, tair_hash_obj);
270270
}
271271
m_listDelNode(keys, node);

0 commit comments

Comments
 (0)