This is an automated email from the ASF dual-hosted git repository.

hulk pushed a commit to branch 2.5
in repository https://gitbox.apache.org/repos/asf/kvrocks.git

commit 57144e6d04ebfec8d0f8681306340da359690612
Author: Binbin <[email protected]>
AuthorDate: Fri Jul 14 16:30:45 2023 +0800

    Fix ZRANGESTORE arity -4 that crashes the server (#1593)
    
    ZRANGESTORE arity should be -5, the code wrongtly sets it to -4,
    when passing 4 arguments, server will trigger a Segmentation fault
    and result a crash:
    ```
    127.0.0.1:6666> zrangestore dstzset srczset 0
    Error: Server closed the connection
    not connected>
    ```
---
 src/commands/cmd_zset.cc                 | 2 +-
 tests/gocase/unit/type/zset/zset_test.go | 8 ++++++++
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/src/commands/cmd_zset.cc b/src/commands/cmd_zset.cc
index 1b76974a..88a8d80d 100644
--- a/src/commands/cmd_zset.cc
+++ b/src/commands/cmd_zset.cc
@@ -1355,7 +1355,7 @@ REDIS_REGISTER_COMMANDS(MakeCmdAttr<CommandZAdd>("zadd", 
-4, "write", 1, 1, 1),
                         MakeCmdAttr<CommandBZPopMin>("bzpopmin", -3, "write", 
1, -2, 1),
                         MakeCmdAttr<CommandZMPop>("zmpop", -4, "write", 
CommandZMPop::Range),
                         MakeCmdAttr<CommandBZMPop>("bzmpop", -5, "write", 
CommandBZMPop::Range),
-                        MakeCmdAttr<CommandZRangeStore>("zrangestore", -4, 
"write", 1, 1, 1),
+                        MakeCmdAttr<CommandZRangeStore>("zrangestore", -5, 
"write", 1, 1, 1),
                         MakeCmdAttr<CommandZRange>("zrange", -4, "read-only", 
1, 1, 1),
                         MakeCmdAttr<CommandZRevRange>("zrevrange", -4, 
"read-only", 1, 1, 1),
                         MakeCmdAttr<CommandZRangeByLex>("zrangebylex", -4, 
"read-only", 1, 1, 1),
diff --git a/tests/gocase/unit/type/zset/zset_test.go 
b/tests/gocase/unit/type/zset/zset_test.go
index bed3d524..8a518518 100644
--- a/tests/gocase/unit/type/zset/zset_test.go
+++ b/tests/gocase/unit/type/zset/zset_test.go
@@ -454,6 +454,14 @@ func basicTests(t *testing.T, rdb *redis.Client, ctx 
context.Context, encoding s
                util.ErrorRegexp(t, rdb.Do(ctx, "bzmpop", 0.1, 1, "zseta", 
"min", "count", 1, "count", 10).Err(), ".*syntax error.*")
        })
 
+       t.Run(fmt.Sprintf("ZRANGESTORE arity check - %s", encoding), func(t 
*testing.T) {
+               rdb.Del(ctx, "zsrc")
+               rdb.Del(ctx, "zdst")
+
+               util.ErrorRegexp(t, rdb.Do(ctx, "zrangestore", "zdst", 
"zsrc").Err(), ".*wrong number of arguments.*")
+               util.ErrorRegexp(t, rdb.Do(ctx, "zrangestore", "zdst", "zsrc", 
0).Err(), ".*wrong number of arguments.*")
+       })
+
        t.Run(fmt.Sprintf("ZRANGESTORE basics - %s", encoding), func(t 
*testing.T) {
                rdb.Del(ctx, "zsrc")
                rdb.Del(ctx, "zdst")

Reply via email to