mirror of
https://github.com/znc/znc.git
synced 2026-07-06 09:51:25 +02:00
Fix CMessage::GetParams() crash - thanks kerio
This commit is contained in:
+9
-5
@@ -38,13 +38,17 @@ void CMessage::Clone(const CMessage& Message)
|
||||
|
||||
CString CMessage::GetParams(unsigned int uIdx, unsigned int uLen) const
|
||||
{
|
||||
VCString vsParams;
|
||||
if (uLen > m_vsParams.size() - uIdx - 1) {
|
||||
uLen = m_vsParams.size() - uIdx - 1;
|
||||
if (m_vsParams.empty() || uLen == 0) {
|
||||
return "";
|
||||
}
|
||||
for (unsigned int i = uIdx; i <= uIdx + uLen; ++i) {
|
||||
if (uLen > m_vsParams.size() - uIdx - 1) {
|
||||
uLen = m_vsParams.size() - uIdx;
|
||||
}
|
||||
VCString vsParams;
|
||||
unsigned uParams = m_vsParams.size();
|
||||
for (unsigned int i = uIdx; i < uIdx + uLen; ++i) {
|
||||
CString sParam = m_vsParams[i];
|
||||
if (sParam.Contains(" ")) {
|
||||
if (i > uIdx && i == uParams - 1 && (sParam.empty() || sParam.StartsWith(":") || sParam.Contains(" "))) {
|
||||
sParam = ":" + sParam;
|
||||
}
|
||||
vsParams.push_back(sParam);
|
||||
|
||||
@@ -33,6 +33,40 @@ TEST(MessageTest, SetParam) {
|
||||
EXPECT_EQ(params, msg.GetParams());
|
||||
}
|
||||
|
||||
TEST(MessageTest, GetParams) {
|
||||
EXPECT_EQ("", CMessage("CMD").GetParams(0));
|
||||
EXPECT_EQ("", CMessage("CMD").GetParams(1));
|
||||
EXPECT_EQ("", CMessage("CMD").GetParams(-1));
|
||||
|
||||
EXPECT_EQ("", CMessage("CMD").GetParams(0, 0));
|
||||
EXPECT_EQ("", CMessage("CMD").GetParams(1, 0));
|
||||
EXPECT_EQ("", CMessage("CMD").GetParams(-1, 0));
|
||||
|
||||
EXPECT_EQ("", CMessage("CMD").GetParams(0, 1));
|
||||
EXPECT_EQ("", CMessage("CMD").GetParams(1, 1));
|
||||
EXPECT_EQ("", CMessage("CMD").GetParams(-1, 1));
|
||||
|
||||
EXPECT_EQ("", CMessage("CMD").GetParams(0, 10));
|
||||
EXPECT_EQ("", CMessage("CMD").GetParams(1, 10));
|
||||
EXPECT_EQ("", CMessage("CMD").GetParams(-1, 10));
|
||||
|
||||
EXPECT_EQ("p1 :p2 p3", CMessage("CMD p1 :p2 p3").GetParams(0));
|
||||
EXPECT_EQ("p2 p3", CMessage("CMD p1 :p2 p3").GetParams(1));
|
||||
EXPECT_EQ("", CMessage("CMD p1 :p2 p3").GetParams(-1));
|
||||
|
||||
EXPECT_EQ("", CMessage("CMD p1 :p2 p3").GetParams(0, 0));
|
||||
EXPECT_EQ("", CMessage("CMD p1 :p2 p3").GetParams(1, 0));
|
||||
EXPECT_EQ("", CMessage("CMD p1 :p2 p3").GetParams(-1, 0));
|
||||
|
||||
EXPECT_EQ("p1", CMessage("CMD p1 :p2 p3").GetParams(0, 1));
|
||||
EXPECT_EQ("p2 p3", CMessage("CMD p1 :p2 p3").GetParams(1, 1));
|
||||
EXPECT_EQ("", CMessage("CMD p1 :p2 p3").GetParams(-1, 1));
|
||||
|
||||
EXPECT_EQ("p1 :p2 p3", CMessage("CMD p1 :p2 p3").GetParams(0, 10));
|
||||
EXPECT_EQ("p2 p3", CMessage("CMD p1 :p2 p3").GetParams(1, 10));
|
||||
EXPECT_EQ("", CMessage("CMD p1 :p2 p3").GetParams(-1, 10));
|
||||
}
|
||||
|
||||
TEST(MessageTest, ToString) {
|
||||
EXPECT_EQ("CMD", CMessage("CMD").ToString());
|
||||
EXPECT_EQ("CMD p1", CMessage("CMD p1").ToString());
|
||||
|
||||
Reference in New Issue
Block a user