From f818b04dad9601ca620a4afabadc83faa1c29735 Mon Sep 17 00:00:00 2001 From: Ed Tanous Date: Mon, 27 Jun 2022 13:17:35 -0700 Subject: Make propertyValueFormatError more typesafe Similar to other patches, make propertyValueFormatError accept a nlohmann::json object, which removes a lot of the unsafe dump code that we have littered about. Tested: No easy to replicate error. Code is identical to previous patchsets. Inspection and code compilation only. Signed-off-by: Ed Tanous Change-Id: Ic9d0f196b6e198073189f744b738db7ffa2f1b74 --- redfish-core/include/error_messages.hpp | 4 ++-- redfish-core/lib/ethernet.hpp | 28 ++++++++-------------------- redfish-core/lib/event_service.hpp | 4 ++-- redfish-core/lib/hypervisor_system.hpp | 14 ++++---------- redfish-core/lib/managers.hpp | 5 ++--- redfish-core/src/error_messages.cpp | 8 +++++--- 6 files changed, 23 insertions(+), 40 deletions(-) (limited to 'redfish-core') diff --git a/redfish-core/include/error_messages.hpp b/redfish-core/include/error_messages.hpp index 77aa8958f8..a396603afe 100644 --- a/redfish-core/include/error_messages.hpp +++ b/redfish-core/include/error_messages.hpp @@ -248,10 +248,10 @@ void createFailedMissingReqProperties(crow::Response& res, * @param[in] arg2 Parameter of message that will replace %2 in its body. * * @returns Message PropertyValueFormatError formatted to JSON */ -nlohmann::json propertyValueFormatError(std::string_view arg1, +nlohmann::json propertyValueFormatError(const nlohmann::json& arg1, std::string_view arg2); -void propertyValueFormatError(crow::Response& res, std::string_view arg1, +void propertyValueFormatError(crow::Response& res, const nlohmann::json& arg1, std::string_view arg2); /** diff --git a/redfish-core/lib/ethernet.hpp b/redfish-core/lib/ethernet.hpp index 411659d248..9aadaeab9d 100644 --- a/redfish-core/lib/ethernet.hpp +++ b/redfish-core/lib/ethernet.hpp @@ -1261,11 +1261,8 @@ inline void address, "SubnetMask", subnetMask, "Gateway", gateway)) { - messages::propertyValueFormatError( - asyncResp->res, - thisJson.dump(2, ' ', true, - nlohmann::json::error_handler_t::replace), - pathString); + messages::propertyValueFormatError(asyncResp->res, thisJson, + pathString); return; } @@ -1386,11 +1383,8 @@ inline void messages::resourceCannotBeDeleted(asyncResp->res); return; } - messages::propertyValueFormatError( - asyncResp->res, - thisJson.dump(2, ' ', true, - nlohmann::json::error_handler_t::replace), - pathString); + messages::propertyValueFormatError(asyncResp->res, thisJson, + pathString); return; } @@ -1455,11 +1449,8 @@ inline void handleIPv6StaticAddressesPatch( if (!json_util::readJson(thisJsonCopy, asyncResp->res, "Address", address, "PrefixLength", prefixLength)) { - messages::propertyValueFormatError( - asyncResp->res, - thisJson.dump(2, ' ', true, - nlohmann::json::error_handler_t::replace), - pathString); + messages::propertyValueFormatError(asyncResp->res, thisJson, + pathString); return; } @@ -1526,11 +1517,8 @@ inline void handleIPv6StaticAddressesPatch( messages::resourceCannotBeDeleted(asyncResp->res); return; } - messages::propertyValueFormatError( - asyncResp->res, - thisJson.dump(2, ' ', true, - nlohmann::json::error_handler_t::replace), - pathString); + messages::propertyValueFormatError(asyncResp->res, thisJson, + pathString); return; } diff --git a/redfish-core/lib/event_service.hpp b/redfish-core/lib/event_service.hpp index 02bb21f898..28a7ac6b6d 100644 --- a/redfish-core/lib/event_service.hpp +++ b/redfish-core/lib/event_service.hpp @@ -375,7 +375,7 @@ inline void requestRoutesEventDestinationCollection(App& app) if (value == nullptr) { messages::propertyValueFormatError( - asyncResp->res, item.value().dump(2, 1), + asyncResp->res, item.value(), "HttpHeaders/" + item.key()); return; } @@ -614,7 +614,7 @@ inline void requestRoutesEventDestination(App& app) if (value == nullptr) { messages::propertyValueFormatError( - asyncResp->res, it.value().dump(2, ' ', true), + asyncResp->res, it.value(), "HttpHeaders/" + it.key()); return; } diff --git a/redfish-core/lib/hypervisor_system.hpp b/redfish-core/lib/hypervisor_system.hpp index 5a7105fc3e..52aeb4330a 100644 --- a/redfish-core/lib/hypervisor_system.hpp +++ b/redfish-core/lib/hypervisor_system.hpp @@ -588,11 +588,8 @@ inline void handleHypervisorIPv4StaticPatch( address, "SubnetMask", subnetMask, "Gateway", gateway)) { - messages::propertyValueFormatError( - asyncResp->res, - thisJson.dump(2, ' ', true, - nlohmann::json::error_handler_t::replace), - pathString); + messages::propertyValueFormatError(asyncResp->res, thisJson, + pathString); return; } @@ -893,11 +890,8 @@ inline void handleHypervisorEthernetInterfacePatch( // One and only one hypervisor instance supported if (ipv4Static.size() != 1) { - messages::propertyValueFormatError( - asyncResp->res, - ipv4Static.dump(2, ' ', true, - nlohmann::json::error_handler_t::replace), - "IPv4StaticAddresses"); + messages::propertyValueFormatError(asyncResp->res, ipv4Static, + "IPv4StaticAddresses"); return; } diff --git a/redfish-core/lib/managers.hpp b/redfish-core/lib/managers.hpp index 362fdeff19..5bb4908262 100644 --- a/redfish-core/lib/managers.hpp +++ b/redfish-core/lib/managers.hpp @@ -707,7 +707,7 @@ inline bool if (config.empty()) { BMCWEB_LOG_ERROR << "Empty Zones"; - messages::propertyValueFormatError(response->res, "[]", "Zones"); + messages::propertyValueFormatError(response->res, config, "Zones"); return false; } for (auto& odata : config) @@ -727,8 +727,7 @@ inline bool { BMCWEB_LOG_ERROR << "Got invalid path " << path; BMCWEB_LOG_ERROR << "Illegal Type Zones"; - messages::propertyValueFormatError(response->res, odata.dump(), - "Zones"); + messages::propertyValueFormatError(response->res, odata, "Zones"); return false; } std::replace(input.begin(), input.end(), '_', ' '); diff --git a/redfish-core/src/error_messages.cpp b/redfish-core/src/error_messages.cpp index abc817d443..64b5abb8bb 100644 --- a/redfish-core/src/error_messages.cpp +++ b/redfish-core/src/error_messages.cpp @@ -478,14 +478,16 @@ void createFailedMissingReqProperties(crow::Response& res, * See header file for more information * @endinternal */ -nlohmann::json propertyValueFormatError(std::string_view arg1, +nlohmann::json propertyValueFormatError(const nlohmann::json& arg1, std::string_view arg2) { + std::string arg1Str = arg1.dump(2, ' ', true, + nlohmann::json::error_handler_t::replace); return getLog(redfish::registries::base::Index::propertyValueFormatError, - std::to_array({arg1, arg2})); + std::to_array({arg1Str, arg2})); } -void propertyValueFormatError(crow::Response& res, std::string_view arg1, +void propertyValueFormatError(crow::Response& res, const nlohmann::json& arg1, std::string_view arg2) { res.result(boost::beast::http::status::bad_request); -- cgit v1.2.3