unit-test: add language tag length validation
Ensure caller has provided enough language tag data to match with their
input length
Change-Id: Icc60601d19ee33a52413dd8f2b8462791571ebcb
Signed-off-by: Andrew Geissler <geissonator@yahoo.com>
diff --git a/slp_parser.cpp b/slp_parser.cpp
index 293cba7..b79cff2 100644
--- a/slp_parser.cpp
+++ b/slp_parser.cpp
@@ -68,19 +68,30 @@
langtagLen = endian::from_network(langtagLen);
- req.header.langtag.insert(
- 0, (const char*)buff.data() + slp::header::OFFSET_LANG, langtagLen);
-
- /* check for the validity of the function */
- if (req.header.functionID <
- static_cast<uint8_t>(slp::FunctionType::SRVRQST) ||
- req.header.functionID >
- static_cast<uint8_t>(slp::FunctionType::SAADV))
+ // Enforce language tag size limits
+ if ((slp::header::OFFSET_LANG + langtagLen) > buff.size())
{
- std::cerr << "Invalid function ID: " << req.header.functionID
+ std::cerr << "Invalid Language Tag Length: " << langtagLen
<< std::endl;
rc = static_cast<int>(slp::Error::PARSE_ERROR);
}
+ else
+ {
+ req.header.langtag.insert(
+ 0, (const char*)buff.data() + slp::header::OFFSET_LANG,
+ langtagLen);
+
+ /* check for the validity of the function */
+ if (req.header.functionID <
+ static_cast<uint8_t>(slp::FunctionType::SRVRQST) ||
+ req.header.functionID >
+ static_cast<uint8_t>(slp::FunctionType::SAADV))
+ {
+ std::cerr << "Invalid function ID: " << req.header.functionID
+ << std::endl;
+ rc = static_cast<int>(slp::Error::PARSE_ERROR);
+ }
+ }
}
return std::make_tuple(rc, std::move(req));