1
0
mirror of https://github.com/fluencelabs/redis synced 2025-03-28 13:21:04 +00:00

Streams: fix reverse iterator discarding of items out of range.

This commit is contained in:
antirez 2017-11-17 16:02:11 +01:00
parent 6919280cc5
commit 9dc79c039a

@ -597,11 +597,18 @@ int streamIteratorGetID(streamIterator *si, streamID *id, int64_t *numfields) {
} }
} }
/* If we do not emit, we have to discard. */ /* If we do not emit, we have to discard if we are going
* forward, or seek the previous entry if we are going
* backward. */
if (!si->rev) {
int to_discard = (flags & STREAM_ITEM_FLAG_SAMEFIELDS) ? int to_discard = (flags & STREAM_ITEM_FLAG_SAMEFIELDS) ?
*numfields : *numfields*2; *numfields : *numfields*2;
for (int64_t i = 0; i < to_discard; i++) for (int64_t i = 0; i < to_discard; i++)
si->lp_ele = lpNext(si->lp,si->lp_ele); si->lp_ele = lpNext(si->lp,si->lp_ele);
} else {
int prev_times = 4; /* flag + id ms/seq diff + numfields. */
while(prev_times--) si->lp_ele = lpPrev(si->lp,si->lp_ele);
}
} }
/* End of listpack reached. Try the next/prev radix tree node. */ /* End of listpack reached. Try the next/prev radix tree node. */