summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMihir Joshi <mihir.coldplay@gmail.com>2014-12-14 10:12:58 -0500
committerMihir Joshi <mihir.coldplay@gmail.com>2014-12-14 10:12:58 -0500
commit352172a7ef5015c0c487ba6258cdf3b4b31a551c (patch)
treefd09082b091a7d933aea2471b684c636819267ec
parente9b014cfacb443a0e828002d900a5a94a704d965 (diff)
downloadredis-352172a7ef5015c0c487ba6258cdf3b4b31a551c.tar.gz
Stricter options for SET command
- As per Antirez's suggestion, this commit raises an error when mutually exclusive options are provided. Duplicate options are allowed.
-rw-r--r--src/t_string.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/src/t_string.c b/src/t_string.c
index 0bbefcaad..067aa10e3 100644
--- a/src/t_string.c
+++ b/src/t_string.c
@@ -103,20 +103,24 @@ void setCommand(redisClient *c) {
char *a = c->argv[j]->ptr;
robj *next = (j == c->argc-1) ? NULL : c->argv[j+1];
- if (!(flags & REDIS_SET_NX) && (a[0] == 'n' || a[0] == 'N') &&
- (a[1] == 'x' || a[1] == 'X') && a[2] == '\0') {
+ if ((a[0] == 'n' || a[0] == 'N') &&
+ (a[1] == 'x' || a[1] == 'X') && a[2] == '\0' &&
+ !(flags & REDIS_SET_XX)) {
flags |= REDIS_SET_NX;
- } else if (!(flags & REDIS_SET_XX) && (a[0] == 'x' || a[0] == 'X') &&
- (a[1] == 'x' || a[1] == 'X') && a[2] == '\0') {
+ } else if ((a[0] == 'x' || a[0] == 'X') &&
+ (a[1] == 'x' || a[1] == 'X') && a[2] == '\0' &&
+ !(flags & REDIS_SET_NX)) {
flags |= REDIS_SET_XX;
- } else if (!(flags & REDIS_SET_EX) && (a[0] == 'e' || a[0] == 'E') &&
- (a[1] == 'x' || a[1] == 'X') && a[2] == '\0' && next) {
+ } else if ((a[0] == 'e' || a[0] == 'E') &&
+ (a[1] == 'x' || a[1] == 'X') && a[2] == '\0' &&
+ !(flags & REDIS_SET_PX) && next) {
flags |= REDIS_SET_EX;
unit = UNIT_SECONDS;
expire = next;
j++;
- } else if (!(flags & REDIS_SET_PX) && (a[0] == 'p' || a[0] == 'P') &&
- (a[1] == 'x' || a[1] == 'X') && a[2] == '\0' && next) {
+ } else if ((a[0] == 'p' || a[0] == 'P') &&
+ (a[1] == 'x' || a[1] == 'X') && a[2] == '\0' &&
+ !(flags & REDIS_SET_EX) && next) {
flags |= REDIS_SET_PX;
unit = UNIT_MILLISECONDS;
expire = next;