Merge pull request #9809

8c43e33e3 logging: Fix easylogging++ init with blank config (iamamyth)
This commit is contained in:
tobtoht 2025-03-24 03:02:46 +00:00
commit f2d765afc4
No known key found for this signature in database
GPG key ID: E45B10DD027D2472
2 changed files with 7 additions and 5 deletions

View file

@ -1993,7 +1993,7 @@ class TypedConfigurations : public base::threading::ThreadSafe {
} }
template <typename Conf_T> template <typename Conf_T>
inline Conf_T& getConfigByRef(Level level, std::unordered_map<Level, Conf_T>* confMap, const char* confName) { inline const Conf_T& getConfigByRef(Level level, std::unordered_map<Level, Conf_T>* confMap, const char* confName) {
base::threading::ScopedLock scopedLock(lock()); base::threading::ScopedLock scopedLock(lock());
return unsafeGetConfigByRef(level, confMap, confName); // This is not unsafe anymore - mutex locked in scope return unsafeGetConfigByRef(level, confMap, confName); // This is not unsafe anymore - mutex locked in scope
} }
@ -2016,8 +2016,9 @@ class TypedConfigurations : public base::threading::ThreadSafe {
} }
template <typename Conf_T> template <typename Conf_T>
Conf_T& unsafeGetConfigByRef(Level level, std::unordered_map<Level, Conf_T>* confMap, const char* confName) { const Conf_T& unsafeGetConfigByRef(Level level, std::unordered_map<Level, Conf_T>* confMap, const char* confName) {
ELPP_UNUSED(confName); ELPP_UNUSED(confName);
static const Conf_T empty;
typename std::unordered_map<Level, Conf_T>::iterator it = confMap->find(level); typename std::unordered_map<Level, Conf_T>::iterator it = confMap->find(level);
if (it == confMap->end()) { if (it == confMap->end()) {
try { try {
@ -2026,7 +2027,7 @@ class TypedConfigurations : public base::threading::ThreadSafe {
ELPP_INTERNAL_ERROR("Unable to get configuration [" << confName << "] for level [" ELPP_INTERNAL_ERROR("Unable to get configuration [" << confName << "] for level ["
<< LevelHelper::convertToString(level) << "]" << LevelHelper::convertToString(level) << "]"
<< std::endl << "Please ensure you have properly configured logger.", false); << std::endl << "Please ensure you have properly configured logger.", false);
throw; // The exception has to be rethrown, to abort a branch leading to UB. return empty;
} }
} }
return it->second; return it->second;

View file

@ -209,9 +209,10 @@ TEST(logging, operator_equals_segfault)
log2 = log1; log2 = log1;
} }
TEST(logging, empty_configurations_throws) TEST(logging, empty_configuration)
{ {
el::Logger log1("id1", nullptr); el::Logger log1("id1", nullptr);
const el::Configurations cfg; const el::Configurations cfg;
EXPECT_ANY_THROW(log1.configure(cfg)); EXPECT_NO_THROW(log1.configure(cfg));
EXPECT_EQ(log1.typedConfigurations()->filename(el::Level::Info), "");
} }