Fix CMessage::GetParams() crash - thanks kerio

This commit is contained in:
J-P Nurmi
2015-09-05 23:45:26 +02:00
parent ce0ddd3aac
commit 50ed9adf8a
2 changed files with 43 additions and 5 deletions
+9 -5
View File
@@ -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);
+34
View File
@@ -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());