Commit 7de2f7e0 authored by Pieter Noordhuis's avatar Pieter Noordhuis Committed by antirez
Browse files

Set p to its new offset before modifying it

parent 2a18c2c4
...@@ -445,12 +445,13 @@ static unsigned char *__ziplistDelete(unsigned char *zl, unsigned char *p, unsig ...@@ -445,12 +445,13 @@ static unsigned char *__ziplistDelete(unsigned char *zl, unsigned char *p, unsig
totlen = p-first.p; totlen = p-first.p;
if (totlen > 0) { if (totlen > 0) {
if (p[0] != ZIP_END) { if (p[0] != ZIP_END) {
/* Tricky: storing the prevlen in this entry might reduce or /* Storing `prevrawlen` in this entry may increase or decrease the
* increase the number of bytes needed, compared to the current * number of bytes required compare to the current `prevrawlen`.
* prevlen. Note that we can always store this length because * There always is room to store this, because it was previously
* it was previously stored by an entry that is being deleted. */ * stored by an entry that is now being deleted. */
nextdiff = zipPrevLenByteDiff(p,first.prevrawlen); nextdiff = zipPrevLenByteDiff(p,first.prevrawlen);
zipPrevEncodeLength(p-nextdiff,first.prevrawlen); p -= nextdiff;
zipPrevEncodeLength(p,first.prevrawlen);
/* Update offset for tail */ /* Update offset for tail */
ZIPLIST_TAIL_OFFSET(zl) -= totlen; ZIPLIST_TAIL_OFFSET(zl) -= totlen;
...@@ -463,7 +464,7 @@ static unsigned char *__ziplistDelete(unsigned char *zl, unsigned char *p, unsig ...@@ -463,7 +464,7 @@ static unsigned char *__ziplistDelete(unsigned char *zl, unsigned char *p, unsig
ZIPLIST_TAIL_OFFSET(zl) += nextdiff; ZIPLIST_TAIL_OFFSET(zl) += nextdiff;
/* Move tail to the front of the ziplist */ /* Move tail to the front of the ziplist */
memmove(first.p,p-nextdiff,ZIPLIST_BYTES(zl)-(p-zl)-1+nextdiff); memmove(first.p,p,ZIPLIST_BYTES(zl)-(p-zl)-1);
} else { } else {
/* The entire tail was deleted. No need to move memory. */ /* The entire tail was deleted. No need to move memory. */
ZIPLIST_TAIL_OFFSET(zl) = (first.p-zl)-first.prevrawlen; ZIPLIST_TAIL_OFFSET(zl) = (first.p-zl)-first.prevrawlen;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment