From 84456a2442552a80f05e7226b5289222faded61f Mon Sep 17 00:00:00 2001 From: Volodymyr Yavdoshenko Date: Wed, 30 Apr 2025 08:00:01 +0300 Subject: [PATCH] fix: JSON.ARRPOP command crash fixed (#5026) fixed: https://github.com/dragonflydb/dragonfly/issues/5025 --- src/server/json_family.cc | 4 ++++ src/server/json_family_test.cc | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/src/server/json_family.cc b/src/server/json_family.cc index 30df6616f..19b634cf5 100644 --- a/src/server/json_family.cc +++ b/src/server/json_family.cc @@ -1794,6 +1794,10 @@ void JsonFamily::ArrPop(CmdArgList args, const CommandContext& cmd_cntx) { int index = parser.NextOrDefault(-1); auto* builder = static_cast(cmd_cntx.rb); + if (auto err = parser.Error(); err) { + return builder->SendError(err->MakeReply()); + } + WrappedJsonPath json_path = GET_OR_SEND_UNEXPECTED(ParseJsonPath(path)); auto cb = [&](Transaction* t, EngineShard* shard) { diff --git a/src/server/json_family_test.cc b/src/server/json_family_test.cc index eb696b074..19e22be62 100644 --- a/src/server/json_family_test.cc +++ b/src/server/json_family_test.cc @@ -3074,4 +3074,9 @@ TEST_F(JsonFamilyTest, SetNestedFields) { EXPECT_EQ(resp, R"({"-field2":2,"field1":1})"); } +TEST_F(JsonFamilyTest, ArrPopWithFormatParameter) { + auto resp = Run({"JSON.ARRPOP", "test_resp3", "FORMAT", "EXPAND", "$.a"}); + ASSERT_THAT(resp, ErrArg("value is not an integer or out of range")); +} + } // namespace dfly