M module-services/service-desktop/parser/MessageHandler.cpp => module-services/service-desktop/parser/MessageHandler.cpp +9 -3
@@ 8,9 8,15 @@ using namespace ParserStateMachine;
xQueueHandle MessageHandler::sendQueue;
-MessageHandler::MessageHandler(std::string &message, sys::Service *OwnerService)
- : messageJson(json11::Json::parse(message, JsonErrorMsg)), OwnerServicePtr(OwnerService)
-{}
+MessageHandler::MessageHandler(std::string &message, sys::Service *OwnerService) : OwnerServicePtr(OwnerService)
+{
+ try {
+ messageJson = json11::Json::parse(message, JsonErrorMsg);
+ }
+ catch (const std::exception &e) {
+ LOG_ERROR("Cannot create MessageHandler! err:%s", e.what());
+ }
+}
void MessageHandler::processMessage()
{
M module-services/service-desktop/parser/MessageHandler.hpp => module-services/service-desktop/parser/MessageHandler.hpp +4 -0
@@ 22,6 22,10 @@ namespace ParserStateMachine
{
return messageJson.is_null();
};
+ bool isValid()
+ {
+ return JsonErrorMsg.empty();
+ }
std::string &getErrorString()
{
return JsonErrorMsg;
M module-services/service-desktop/parser/ParserStateMachine.cpp => module-services/service-desktop/parser/ParserStateMachine.cpp +7 -12
@@ 144,18 144,13 @@ void StateMachine::parsePayload()
state = State::ReceivedPayload;
// processing payload
- try {
- auto handler = std::make_unique<MessageHandler>(payload, OwnerServicePtr);
+ auto handler = std::make_unique<MessageHandler>(payload, OwnerServicePtr);
- if (handler->isJSONNull()) {
- LOG_DEBUG("JsonErr: %s", handler->getErrorString().c_str());
- state = State::NoMsg;
- return;
- }
-
- handler->processMessage();
- }
- catch (const std::exception &e) {
- LOG_ERROR("Cannot create MessageHandler! err:%s\n", e.what());
+ if (!handler->isValid() || handler->isJSONNull()) {
+ LOG_DEBUG("JsonErr: %s", handler->getErrorString().c_str());
+ state = State::NoMsg;
+ return;
}
+
+ handler->processMessage();
}
M module-services/service-desktop/tests/unittest.cpp => module-services/service-desktop/tests/unittest.cpp +18 -0
@@ 104,6 104,24 @@ TEST_CASE("Parser Test")
parser.processMessage(testMessage);
REQUIRE(parser.getCurrentState() == State::NoMsg);
}
+ SECTION("Parse message with incorrect header length")
+ {
+ testMessage = R"(#000000072{"endpoint":7, "method":2, "uuid":3, "body":{"threadID":1,"unread":false}})";
+ parser.processMessage(testMessage);
+ REQUIRE(parser.getCurrentState() == State::NoMsg);
+ }
+ SECTION("Parse message with damaged json ")
+ {
+ testMessage = R"(#000000074{"endpoint":7, "method":2, "uuid":3, "bo}}dy":{"threadID":1,"unread":false)";
+ parser.processMessage(testMessage);
+ REQUIRE(parser.getCurrentState() == State::NoMsg);
+ }
+ SECTION("Parse message with damaged json and incorrect header length")
+ {
+ testMessage = R"(#000000072{"endpoint":7, "method":2, "uuid":3, "bo}}dy":{"threadID":1,"unread":false)";
+ parser.processMessage(testMessage);
+ REQUIRE(parser.getCurrentState() == State::NoMsg);
+ }
}
TEST_CASE("DB Helpers test - json decoding")
M source/main.cpp => source/main.cpp +1 -1
@@ 185,7 185,7 @@ int main()
ret |= sys::SystemManager::CreateService(std::make_shared<ServiceAudio>(), sysmgr.get());
// Service Desktop disabled on master - pulling read on usb driver
- ret |= sys::SystemManager::CreateService(std::make_shared<ServiceDesktop>(), sysmgr.get());
+ // ret |= sys::SystemManager::CreateService(std::make_shared<ServiceDesktop>(), sysmgr.get());
// vector with launchers to applications
std::vector<std::unique_ptr<app::ApplicationLauncher>> applications;