summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/bitops.c8
-rw-r--r--src/t_string.c2
2 files changed, 4 insertions, 6 deletions
diff --git a/src/bitops.c b/src/bitops.c
index 4c8662244..ec912bc24 100644
--- a/src/bitops.c
+++ b/src/bitops.c
@@ -229,19 +229,17 @@ void setbitCommand(redisClient *c) {
return;
}
+ byte = bitoffset >> 3;
o = lookupKeyWrite(c->db,c->argv[1]);
if (o == NULL) {
- o = createObject(REDIS_STRING,sdsempty());
+ o = createObject(REDIS_STRING,sdsnewlen(NULL, byte+1));
dbAdd(c->db,c->argv[1],o);
} else {
if (checkType(c,o,REDIS_STRING)) return;
o = dbUnshareStringValue(c->db,c->argv[1],o);
+ o->ptr = sdsgrowzero(o->ptr,byte+1);
}
- /* Grow sds value to the right length if necessary */
- byte = bitoffset >> 3;
- o->ptr = sdsgrowzero(o->ptr,byte+1);
-
/* Get current values */
byteval = ((uint8_t*)o->ptr)[byte];
bit = 7 - (bitoffset & 0x7);
diff --git a/src/t_string.c b/src/t_string.c
index 53da875cb..06c2e9ceb 100644
--- a/src/t_string.c
+++ b/src/t_string.c
@@ -206,7 +206,7 @@ void setrangeCommand(redisClient *c) {
if (checkStringLength(c,offset+sdslen(value)) != REDIS_OK)
return;
- o = createObject(REDIS_STRING,sdsempty());
+ o = createObject(REDIS_STRING,sdsnewlen(NULL, offset+sdslen(value)));
dbAdd(c->db,c->argv[1],o);
} else {
size_t olen;