Skip to content

Commit

Permalink
tryObjectEncoding(): don't call stringl2() for too big strings.
Browse files Browse the repository at this point in the history
We are sure that a string that is longer than 21 chars cannot be
represented by a 64 bit signed integer, as -(2^64) is 21 chars:

strlen(-18446744073709551616) => 21
  • Loading branch information
antirez committed Aug 27, 2013
1 parent 6b61e94 commit b5cc22d
Showing 1 changed file with 3 additions and 1 deletion.
4 changes: 3 additions & 1 deletion src/object.c
Expand Up @@ -273,6 +273,7 @@ int isObjectRepresentableAsLongLong(robj *o, long long *llval) {
robj *tryObjectEncoding(robj *o) {
long value;
sds s = o->ptr;
size_t len;

if (o->encoding != REDIS_ENCODING_RAW)
return o; /* Already encoded */
Expand All @@ -286,7 +287,8 @@ robj *tryObjectEncoding(robj *o) {
redisAssertWithInfo(NULL,o,o->type == REDIS_STRING);

/* Check if we can represent this string as a long integer */
if (!string2l(s,sdslen(s),&value)) return o;
len = sdslen(s);
if (len > 21 || !string2l(s,len,&value)) return o;

/* Ok, this object can be encoded...
*
Expand Down

0 comments on commit b5cc22d

Please sign in to comment.