Fix potential map::at error
There are some potential errors, when using the map::at method,
the process may hang due to out of bounds. so the exception should
be caught.
Also, use the map::contains method of C++20 instead of map::find.
Tested: built pldm successfully and worked.
Signed-off-by: George Liu <liuxiwei@inspur.com>
Change-Id: Ia5d7dea906e5c598072c08b27387195ef1201839
diff --git a/libpldmresponder/platform_numeric_effecter.hpp b/libpldmresponder/platform_numeric_effecter.hpp
index 62228e0..8aeaaa1 100644
--- a/libpldmresponder/platform_numeric_effecter.hpp
+++ b/libpldmresponder/platform_numeric_effecter.hpp
@@ -251,21 +251,30 @@
return rc;
}
- const auto& [dbusMappings, dbusValMaps] =
- handler.getDbusObjMaps(effecterId);
- DBusMapping dbusMapping{
- dbusMappings[0].objectPath, dbusMappings[0].interface,
- dbusMappings[0].propertyName, dbusMappings[0].propertyType};
try
{
- dBusIntf.setDbusProperty(dbusMapping, dbusValue.value());
+ const auto& [dbusMappings, dbusValMaps] =
+ handler.getDbusObjMaps(effecterId);
+ DBusMapping dbusMapping{
+ dbusMappings[0].objectPath, dbusMappings[0].interface,
+ dbusMappings[0].propertyName, dbusMappings[0].propertyType};
+ try
+ {
+
+ dBusIntf.setDbusProperty(dbusMapping, dbusValue.value());
+ }
+ catch (const std::exception& e)
+ {
+ std::cerr << "Error setting property, ERROR=" << e.what()
+ << " PROPERTY=" << dbusMapping.propertyName
+ << " INTERFACE=" << dbusMapping.interface << " PATH="
+ << dbusMapping.objectPath << "\n";
+ return PLDM_ERROR;
+ }
}
- catch (const std::exception& e)
+ catch (const std::out_of_range& e)
{
- std::cerr << "Error setting property, ERROR=" << e.what()
- << " PROPERTY=" << dbusMapping.propertyName << " INTERFACE="
- << dbusMapping.interface << " PATH=" << dbusMapping.objectPath
- << "\n";
+ std::cerr << "Unknown effecter ID : " << effecterId << e.what() << '\n';
return PLDM_ERROR;
}