diff options
author | oranagra <oran@redislabs.com> | 2016-05-24 14:52:43 +0300 |
---|---|---|
committer | antirez <antirez@gmail.com> | 2016-06-16 12:56:17 +0200 |
commit | a2e27b810edfad18b3ecc9c176a4606f94a2f0e4 (patch) | |
tree | 5127123078b2fdfa76e60a85065ec6ac7c3c3505 | |
parent | 26555f5e008b099b888ef39cabec632f4b31a038 (diff) | |
download | redis-a2e27b810edfad18b3ecc9c176a4606f94a2f0e4.tar.gz |
fix crash in BITFIELD GET on non existing key or wrong type see #3259
this was a bug in the recent refactoring: bee963c4459223d874e3294a0d8638a588d33c8e
-rw-r--r-- | src/bitops.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/src/bitops.c b/src/bitops.c index 781cc58d6..a07633fa3 100644 --- a/src/bitops.c +++ b/src/bitops.c @@ -1060,12 +1060,14 @@ void bitfieldCommand(client *c) { } else { /* GET */ unsigned char buf[9]; - long strlen; + long strlen = 0; unsigned char *src = NULL; char llbuf[LONG_STR_SIZE]; - o = lookupKeyRead(c->db,c->argv[1]); - src = getObjectReadOnlyString(o,&strlen,llbuf); + if ((o = lookupKeyRead(c->db,c->argv[1])) != NULL) { + if (checkType(c,o,OBJ_STRING)) continue; + src = getObjectReadOnlyString(o,&strlen,llbuf); + } /* For GET we use a trick: before executing the operation * copy up to 9 bytes to a local buffer, so that we can easily |