HSCAN/ZSCAN: skip value when matching.

This fixes issue #1360 and #1362.
This commit is contained in:
antirez 2013-11-05 12:16:29 +01:00
parent f6738923a6
commit 56f53f7b3c

View File

@ -505,11 +505,16 @@ void scanGenericCommand(redisClient *c, robj *o) {
if (filter) { if (filter) {
decrRefCount(kobj); decrRefCount(kobj);
listDelNode(keys, node); listDelNode(keys, node);
/* Also remove the value for hashes and sorted sets. */ }
if (o && (o->type == REDIS_ZSET || o->type == REDIS_HASH)) {
node = nextnode; /* If this is an hash or a sorted set, we have a flat list of
* key-value elements, so if this element was filtered, remove the
* value, or skip it if it was not filtered: we only match keys. */
if (o && (o->type == REDIS_ZSET || o->type == REDIS_HASH)) {
node = nextnode;
nextnode = listNextNode(node);
if (filter) {
kobj = listNodeValue(node); kobj = listNodeValue(node);
nextnode = listNextNode(node);
decrRefCount(kobj); decrRefCount(kobj);
listDelNode(keys, node); listDelNode(keys, node);
} }