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));