Fix extracting certificate id
std::strtol() expects null-terminated string. This means that passing
string_view.data() to it may cause undefined behaviour.
Let's fix it by using boost::convert instead.
Tested: Manually by sending valid requests and looking for empty
responses.
Change-Id: I319277551b5e85586783afdc8c86e4a7d8db876e
Signed-off-by: Iwona Klimaszewska <iwona.klimaszewska@intel.com>
diff --git a/redfish-core/lib/certificate_service.hpp b/redfish-core/lib/certificate_service.hpp
index 9b4f60e..f82363b 100644
--- a/redfish-core/lib/certificate_service.hpp
+++ b/redfish-core/lib/certificate_service.hpp
@@ -17,6 +17,8 @@
#include "node.hpp"
+#include <boost/convert.hpp>
+#include <boost/convert/strtol.hpp>
#include <variant>
namespace redfish
{
@@ -104,17 +106,14 @@
{
return -1;
}
+
if ((found + 1) < url.length())
{
- char *endPtr;
std::string_view str = url.substr(found + 1);
- long value = std::strtol(str.data(), &endPtr, 10);
- if (endPtr != str.end())
- {
- return -1;
- }
- return value;
+
+ return boost::convert<long>(str, boost::cnv::strtol()).value_or(-1);
}
+
return -1;
}