From 9b3b9df344e44f74b825a50cb25258d1aef894f7 Mon Sep 17 00:00:00 2001 From: Adrien Beraud <adrien.beraud@savoirfairelinux.com> Date: Fri, 31 Jan 2025 17:43:10 -0500 Subject: [PATCH] namedirectory: catch parsing errors Change-Id: Ia92378315f88051de76311d23156c1eb85c07770 --- src/jamidht/namedirectory.cpp | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/src/jamidht/namedirectory.cpp b/src/jamidht/namedirectory.cpp index 94a0ab2ca..a3c08d535 100644 --- a/src/jamidht/namedirectory.cpp +++ b/src/jamidht/namedirectory.cpp @@ -476,6 +476,10 @@ NameDirectory::saveCache() dhtnet::fileutils::recursive_mkdir(fileutils::get_cache_dir() / CACHE_DIRECTORY); std::lock_guard lock(dhtnet::fileutils::getFileLock(cachePath_)); std::ofstream file(cachePath_, std::ios::trunc | std::ios::binary); + if (!file.is_open()) { + JAMI_ERROR("Unable to save cache to {}", cachePath_); + return; + } { std::lock_guard l(cacheLock_); msgpack::pack(file, nameCache_); @@ -505,13 +509,20 @@ NameDirectory::loadCache() } } - // load values - std::lock_guard l(cacheLock_); - msgpack::object_handle oh; - if (pac.next(oh)) - oh.get().convert(nameCache_); - for (const auto& m : nameCache_) - addrCache_.emplace(m.second.second, m.second); + try { + // load values + std::lock_guard l(cacheLock_); + msgpack::object_handle oh; + if (pac.next(oh)) + oh.get().convert(nameCache_); + for (const auto& m : nameCache_) + addrCache_.emplace(m.second.second, m.second); + } catch (const msgpack::parse_error& e) { + JAMI_ERROR("Error when parsing msgpack object: {}", e.what()); + } catch (const std::bad_cast& e) { + JAMI_ERROR("Error when loading cache: {}", e.what()); + } + JAMI_DEBUG("Loaded {:d} name-address mappings", nameCache_.size()); } -- GitLab