diff options
author | antirez <antirez@gmail.com> | 2016-02-26 15:53:29 +0100 |
---|---|---|
committer | antirez <antirez@gmail.com> | 2016-05-02 08:41:26 +0200 |
commit | c333a9e2d7873190b22aaee8835a188bc55b60dc (patch) | |
tree | b22d8f9f175750e173605032501664e9a4db3e6b | |
parent | f84871cb5dd3bb3c04bfd7ac53b6e06b246f511f (diff) | |
download | redis-c333a9e2d7873190b22aaee8835a188bc55b60dc.tar.gz |
BITFIELD: Fix #<index> form parsing.
-rw-r--r-- | src/bitops.c | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/src/bitops.c b/src/bitops.c index d2e99fc80..4a1b3959d 100644 --- a/src/bitops.c +++ b/src/bitops.c @@ -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 *p = o->ptr; size_t plen = sdslen(p); + int usehash = 0; /* Handle #<offset> form. */ - if (hash && bits > 0) { - p++; - plen--; - } + if (p[0] == '#' && hash && bits > 0) usehash = 1; - if (string2ll(p,plen,&loffset) == 0) { + if (string2ll(p+usehash,plen-usehash,&loffset) == 0) { addReplyError(c,err); return C_ERR; } /* Adjust the offset by 'bits' for #<offset> form. */ - if (hash && bits > 0) loffset *= bits; + if (usehash) loffset *= bits; /* Limit offset to 512MB in bytes */ if ((loffset < 0) || ((unsigned long long)loffset >> 3) >= (512*1024*1024)) |