Commit 08ec8f71 authored by Guy Benoish's avatar Guy Benoish Committed by antirez
Browse files

XADD with ID 0-0 stores an empty key

Calling XADD with 0-0 or 0 would result in creating an
empty key and storing it in the database.
Even worse, because XADD will reply with error the action
will not be replicated, creating a master-replica
inconsistency
parent 09e1fe27
...@@ -1219,6 +1219,14 @@ void xaddCommand(client *c) { ...@@ -1219,6 +1219,14 @@ void xaddCommand(client *c) {
return; return;
} }
/* Return ASAP if minimal ID (0-0) was given so we avoid possibly creating
* a new stream and have streamAppendItem fail, leaving an empty key in the
* database. */
if (id_given && id.ms == 0 && id.seq == 0) {
addReplyError(c,"The ID specified in XADD must be greater than 0-0");
return;
}
/* Lookup the stream at key. */ /* Lookup the stream at key. */
robj *o; robj *o;
stream *s; stream *s;
......
...@@ -123,6 +123,12 @@ start_server { ...@@ -123,6 +123,12 @@ start_server {
assert {[r xlen mystream] == $j} assert {[r xlen mystream] == $j}
} }
test {XADD with ID 0-0} {
r DEL mystream
catch {r XADD mystream 0-0 k v} err
assert {[r EXISTS mystream] == 0}
}
test {XRANGE COUNT works as expected} { test {XRANGE COUNT works as expected} {
assert {[llength [r xrange mystream - + COUNT 10]] == 10} assert {[llength [r xrange mystream - + COUNT 10]] == 10}
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment