From 70592911a17aa683c2aae229c1510d4954c13ee5 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Sun, 21 Nov 2021 20:10:19 +0100 Subject: [PATCH] Return nullopt for state events in rooms we are not in --- src/Cache_p.h | 66 +++++++++++++++++++++++++-------------------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/src/Cache_p.h b/src/Cache_p.h index b995eed1..67185298 100644 --- a/src/Cache_p.h +++ b/src/Cache_p.h @@ -451,40 +451,40 @@ private: const std::string &room_id, std::string_view state_key = "") { - constexpr auto type = mtx::events::state_content_to_type; - static_assert(type != mtx::events::EventType::Unsupported, - "Not a supported type in state events."); - - if (room_id.empty()) - return std::nullopt; - const auto typeStr = to_string(type); - - std::string_view value; - if (state_key.empty()) { - auto db = getStatesDb(txn, room_id); - if (!db.get(txn, typeStr, value)) { - return std::nullopt; - } - } else { - auto db = getStatesKeyDb(txn, room_id); - std::string d = json::object({{"key", state_key}}).dump(); - std::string_view data = d; - std::string_view typeStrV = typeStr; - - auto cursor = lmdb::cursor::open(txn, db); - if (!cursor.get(typeStrV, data, MDB_GET_BOTH)) - return std::nullopt; - - try { - auto eventsDb = getEventsDb(txn, room_id); - if (!eventsDb.get(txn, json::parse(data)["id"].get(), value)) - return std::nullopt; - } catch (std::exception &e) { - return std::nullopt; - } - } - try { + constexpr auto type = mtx::events::state_content_to_type; + static_assert(type != mtx::events::EventType::Unsupported, + "Not a supported type in state events."); + + if (room_id.empty()) + return std::nullopt; + const auto typeStr = to_string(type); + + std::string_view value; + if (state_key.empty()) { + auto db = getStatesDb(txn, room_id); + if (!db.get(txn, typeStr, value)) { + return std::nullopt; + } + } else { + auto db = getStatesKeyDb(txn, room_id); + std::string d = json::object({{"key", state_key}}).dump(); + std::string_view data = d; + std::string_view typeStrV = typeStr; + + auto cursor = lmdb::cursor::open(txn, db); + if (!cursor.get(typeStrV, data, MDB_GET_BOTH)) + return std::nullopt; + + try { + auto eventsDb = getEventsDb(txn, room_id); + if (!eventsDb.get(txn, json::parse(data)["id"].get(), value)) + return std::nullopt; + } catch (std::exception &e) { + return std::nullopt; + } + } + return json::parse(value).get>(); } catch (std::exception &e) { return std::nullopt;