Fix parsing of Redfish messages with empty MessageArgs

The current parsing shows an empty string as a MessageArg for
messages that have no arguments.  This fixes it to correctly
display an empty MessageArgs.

It also fixes a parsing range check error for the case when
a message without MessageArgs is not terminated with a comma.

Tested:
Verified that messages show without args show in Redfish with
an empty MessageArgs.

Injected a message without a terminating comma and confirmed that
it is correctly parsed and displayed.

Change-Id: I896554941d2d239afa889d41edef1f1f71b59906
Signed-off-by: Jason M. Bills <jason.m.bills@linux.intel.com>
diff --git a/redfish-core/lib/log_services.hpp b/redfish-core/lib/log_services.hpp
index f65f3cc..9e3b2f0 100644
--- a/redfish-core/lib/log_services.hpp
+++ b/redfish-core/lib/log_services.hpp
@@ -584,8 +584,6 @@
         return 1;
     }
     std::string &messageID = logEntryFields[0];
-    std::string &messageArgsStart = logEntryFields[1];
-    std::size_t messageArgsSize = logEntryFields.size() - 1;
 
     // Get the Message from the MessageRegistry
     const message_registries::Message *message =
@@ -599,18 +597,30 @@
         severity = message->severity;
     }
 
-    // Get the MessageArgs from the log
-    boost::beast::span messageArgs(&messageArgsStart, messageArgsSize);
-
-    // Fill the MessageArgs into the Message
-    int i = 0;
-    for (const std::string &messageArg : messageArgs)
+    // Get the MessageArgs from the log if there are any
+    boost::beast::span<std::string> messageArgs;
+    if (logEntryFields.size() > 1)
     {
-        std::string argStr = "%" + std::to_string(++i);
-        size_t argPos = msg.find(argStr);
-        if (argPos != std::string::npos)
+        std::string &messageArgsStart = logEntryFields[1];
+        // If the first string is empty, assume there are no MessageArgs
+        std::size_t messageArgsSize = 0;
+        if (!messageArgsStart.empty())
         {
-            msg.replace(argPos, argStr.length(), messageArg);
+            messageArgsSize = logEntryFields.size() - 1;
+        }
+
+        messageArgs = boost::beast::span(&messageArgsStart, messageArgsSize);
+
+        // Fill the MessageArgs into the Message
+        int i = 0;
+        for (const std::string &messageArg : messageArgs)
+        {
+            std::string argStr = "%" + std::to_string(++i);
+            size_t argPos = msg.find(argStr);
+            if (argPos != std::string::npos)
+            {
+                msg.replace(argPos, argStr.length(), messageArg);
+            }
         }
     }