diff --git a/src/module.c b/src/module.c index a5b3d52aef296..1f4be13c9a49e 100644 --- a/src/module.c +++ b/src/module.c @@ -1446,14 +1446,19 @@ int RM_StringTruncate(RedisModuleKey *key, size_t newlen) { } else { /* Unshare and resize. */ key->value = dbUnshareStringValue(key->db, key->key, key->value); - size_t curlen = sdslen(key->value->ptr); - if (newlen > curlen) { - key->value->ptr = sdsgrowzero(key->value->ptr,newlen); - } else if (newlen < curlen) { - sdsrange(key->value->ptr,0,newlen-1); - /* If the string is too wasteful, reallocate it. */ - if (sdslen(key->value->ptr) < sdsavail(key->value->ptr)) - key->value->ptr = sdsRemoveFreeSpace(key->value->ptr); + if (newlen == 0) { + sdsfree(key->value->ptr); + key->value->ptr = sdsempty(); + } else { + size_t curlen = sdslen(key->value->ptr); + if (newlen > curlen) { + key->value->ptr = sdsgrowzero(key->value->ptr,newlen); + } else if (newlen < curlen) { + sdsrange(key->value->ptr,0,newlen-1); + /* If the string is too wasteful, reallocate it. */ + if (sdslen(key->value->ptr) < sdsavail(key->value->ptr)) + key->value->ptr = sdsRemoveFreeSpace(key->value->ptr); + } } } return REDISMODULE_OK;