diff --git a/sds.c b/sds.c index ba93282..3be1c55 100644 --- a/sds.c +++ b/sds.c @@ -744,17 +744,16 @@ void sdsrange(sds s, ssize_t start, ssize_t end) { end = len+end; if (end < 0) end = 0; } - newlen = (start > end) ? 0 : (end-start)+1; - if (newlen != 0) { - if (start >= (ssize_t)len) { - newlen = 0; - } else if (end >= (ssize_t)len) { - end = len-1; - newlen = (start > end) ? 0 : (end-start)+1; - } + + if (end >= (signed)len) { + end = len - 1; + } + if (start >= (signed)len) { + newlen = 0; } else { - start = 0; + newlen = (start > end) ? 0 : (end-start)+1; } + if (start && newlen) memmove(s, s+start, newlen); s[newlen] = 0; sdssetlen(s,newlen);