BITFIELD: Fix #<index> form parsing.

This commit is contained in:
antirez 2016-02-26 15:53:29 +01:00
parent 2800d090a7
commit 11745e0981

View File

@ -398,20 +398,18 @@ int getBitOffsetFromArgument(client *c, robj *o, size_t *offset, int hash, int b
char *err = "bit offset is not an integer or out of range"; char *err = "bit offset is not an integer or out of range";
char *p = o->ptr; char *p = o->ptr;
size_t plen = sdslen(p); size_t plen = sdslen(p);
int usehash = 0;
/* Handle #<offset> form. */ /* Handle #<offset> form. */
if (hash && bits > 0) { if (p[0] == '#' && hash && bits > 0) usehash = 1;
p++;
plen--;
}
if (string2ll(p,plen,&loffset) == 0) { if (string2ll(p+usehash,plen-usehash,&loffset) == 0) {
addReplyError(c,err); addReplyError(c,err);
return C_ERR; return C_ERR;
} }
/* Adjust the offset by 'bits' for #<offset> form. */ /* Adjust the offset by 'bits' for #<offset> form. */
if (hash && bits > 0) loffset *= bits; if (usehash) loffset *= bits;
/* Limit offset to 512MB in bytes */ /* Limit offset to 512MB in bytes */
if ((loffset < 0) || ((unsigned long long)loffset >> 3) >= (512*1024*1024)) if ((loffset < 0) || ((unsigned long long)loffset >> 3) >= (512*1024*1024))