Check for integer validity in setex command
This commit is contained in:
parent
affabbaee7
commit
f9b70125d6
|
@ -22,7 +22,7 @@ extern const char kInvalidDbIndErr[];
|
||||||
extern const char kScriptNotFound[];
|
extern const char kScriptNotFound[];
|
||||||
extern const char kAuthRejected[];
|
extern const char kAuthRejected[];
|
||||||
extern const char kExpiryOutOfRange[];
|
extern const char kExpiryOutOfRange[];
|
||||||
|
extern const char kInvalidExpireTime[];
|
||||||
extern const char kSyntaxErrType[];
|
extern const char kSyntaxErrType[];
|
||||||
extern const char kScriptErrType[];
|
extern const char kScriptErrType[];
|
||||||
|
|
||||||
|
|
|
@ -61,7 +61,7 @@ const char kInvalidDbIndErr[] = "invalid DB index";
|
||||||
const char kScriptNotFound[] = "-NOSCRIPT No matching script. Please use EVAL.";
|
const char kScriptNotFound[] = "-NOSCRIPT No matching script. Please use EVAL.";
|
||||||
const char kAuthRejected[] = "-WRONGPASS invalid username-password pair or user is disabled.";
|
const char kAuthRejected[] = "-WRONGPASS invalid username-password pair or user is disabled.";
|
||||||
const char kExpiryOutOfRange[] = "expiry is out of range";
|
const char kExpiryOutOfRange[] = "expiry is out of range";
|
||||||
|
const char kInvalidExpireTime[] = "invalid expire time";
|
||||||
const char kSyntaxErrType[] = "syntax_error";
|
const char kSyntaxErrType[] = "syntax_error";
|
||||||
const char kScriptErrType[] = "script_error";
|
const char kScriptErrType[] = "script_error";
|
||||||
|
|
||||||
|
|
|
@ -172,12 +172,16 @@ void StringFamily::SetEx(CmdArgList args, ConnectionContext* cntx) {
|
||||||
string_view key = ArgS(args, 1);
|
string_view key = ArgS(args, 1);
|
||||||
string_view ex = ArgS(args, 2);
|
string_view ex = ArgS(args, 2);
|
||||||
string_view value = ArgS(args, 3);
|
string_view value = ArgS(args, 3);
|
||||||
uint32_t secs;
|
int32_t secs;
|
||||||
|
|
||||||
if (!absl::SimpleAtoi(ex, &secs)) {
|
if (!absl::SimpleAtoi(ex, &secs)) {
|
||||||
return (*cntx)->SendError(kInvalidIntErr);
|
return (*cntx)->SendError(kInvalidIntErr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (secs < 1) {
|
||||||
|
return (*cntx)->SendError(absl::StrCat(facade::kInvalidExpireTime, " in setex"));
|
||||||
|
}
|
||||||
|
|
||||||
SetCmd::SetParams sparams{cntx->db_index()};
|
SetCmd::SetParams sparams{cntx->db_index()};
|
||||||
sparams.expire_after_ms = uint64_t(secs) * 1000;
|
sparams.expire_after_ms = uint64_t(secs) * 1000;
|
||||||
|
|
||||||
|
|
|
@ -253,9 +253,10 @@ TEST_F(StringFamilyTest, MSetIncr) {
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(StringFamilyTest, SetEx) {
|
TEST_F(StringFamilyTest, SetEx) {
|
||||||
|
ASSERT_THAT(Run({"setex", "key", "1", "val"}), RespEq("OK"));
|
||||||
ASSERT_THAT(Run({"setex", "key", "10", "val"}), RespEq("OK"));
|
ASSERT_THAT(Run({"setex", "key", "10", "val"}), RespEq("OK"));
|
||||||
ASSERT_THAT(Run({"setex", "key", "10", "val"}), RespEq("OK"));
|
ASSERT_THAT(Run({"ttl", "key"}), ElementsAre(IntArg(10)));
|
||||||
ASSERT_THAT(Run({"setex", "key", "10", "val"}), RespEq("OK"));
|
ASSERT_THAT(Run({"setex", "key", "0", "val"}), ElementsAre(ErrArg("invalid expire time")));
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace dfly
|
} // namespace dfly
|
||||||
|
|
Loading…
Reference in New Issue