Skip to content

Commit

Permalink
Fix for a SORT bug introduced with commit 16fa22f, regression test added
Browse files Browse the repository at this point in the history
  • Loading branch information
antirez committed Apr 18, 2010
1 parent 1777275 commit 08ee9b5
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 5 deletions.
9 changes: 4 additions & 5 deletions redis.c
Original file line number Diff line number Diff line change
Expand Up @@ -3058,7 +3058,7 @@ static robj *getDecodedObject(robj *o) {
dec = createStringObject(buf,strlen(buf));
return dec;
} else {
redisAssert(1 != 1);
redisPanic("Unknown encoding type");
}
}

Expand Down Expand Up @@ -6626,9 +6626,8 @@ static int sortCompare(const void *s1, const void *s2) {
cmp = strcoll(so1->u.cmpobj->ptr,so2->u.cmpobj->ptr);
}
} else {
/* Compare elements directly. Note that these objects already
* need to be non-encoded (see sortCommand). */
cmp = strcoll(so1->obj->ptr,so2->obj->ptr);
/* Compare elements directly. */
cmp = compareStringObjects(so1->obj,so2->obj);
}
}
return server.sort_desc ? -cmp : cmp;
Expand Down Expand Up @@ -6766,7 +6765,7 @@ static void sortCommand(redisClient *c) {
}

if (alpha) {
vector[j].u.cmpobj = getDecodedObject(byval);
if (sortby) vector[j].u.cmpobj = getDecodedObject(byval);
} else {
if (byval->encoding == REDIS_ENCODING_RAW) {
vector[j].u.score = strtod(byval->ptr,NULL);
Expand Down
9 changes: 9 additions & 0 deletions test-redis.tcl
Original file line number Diff line number Diff line change
Expand Up @@ -935,6 +935,15 @@ proc main {} {
lsort [array names myset]
} {a b c}

test {SORT ALPHA against integer encoded strings} {
$r del mylist
$r lpush mylist 2
$r lpush mylist 1
$r lpush mylist 3
$r lpush mylist 10
$r sort mylist alpha
} {1 10 2 3}

test {Create a random list and a random set} {
set tosort {}
array set seenrand {}
Expand Down

0 comments on commit 08ee9b5

Please sign in to comment.