From 57f505c48682385a8943d2d88bbf68632538f339 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Tue, 30 Aug 2022 15:40:33 +0200 Subject: [PATCH] Fix invalid userids on profile requests --- CMakeLists.txt | 2 +- io.github.NhekoReborn.Nheko.yaml | 2 +- src/Cache.cpp | 14 ++++++++++++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 33154294..86377da2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -582,7 +582,7 @@ if(USE_BUNDLED_MTXCLIENT) FetchContent_Declare( MatrixClient GIT_REPOSITORY https://github.com/Nheko-Reborn/mtxclient.git - GIT_TAG ce47f0b280c7e5241a556d63c518267d5e6b9c1c + GIT_TAG 43e88905659b027bc47c40fe0d31cf28fd639ef9 ) set(BUILD_LIB_EXAMPLES OFF CACHE INTERNAL "") set(BUILD_LIB_TESTS OFF CACHE INTERNAL "") diff --git a/io.github.NhekoReborn.Nheko.yaml b/io.github.NhekoReborn.Nheko.yaml index 603495b3..1ce2f69d 100644 --- a/io.github.NhekoReborn.Nheko.yaml +++ b/io.github.NhekoReborn.Nheko.yaml @@ -203,7 +203,7 @@ modules: buildsystem: cmake-ninja name: mtxclient sources: - - commit: ce47f0b280c7e5241a556d63c518267d5e6b9c1c + - commit: 43e88905659b027bc47c40fe0d31cf28fd639ef9 #tag: v0.8.0 type: git url: https://github.com/Nheko-Reborn/mtxclient.git diff --git a/src/Cache.cpp b/src/Cache.cpp index 558eb334..ede2e4e5 100644 --- a/src/Cache.cpp +++ b/src/Cache.cpp @@ -4464,6 +4464,11 @@ Cache::markUserKeysOutOfDate(lmdb::txn &txn, query.token = sync_token; for (const auto &user : user_ids) { + if (user.size() > 255) { + nhlog::db()->debug("Skipping device key query for user with invalid mxid: {}", user); + continue; + } + nhlog::db()->debug("Marking user keys out of date: {}", user); std::string_view oldKeys; @@ -4504,6 +4509,15 @@ void Cache::query_keys(const std::string &user_id, std::function cb) { + if (user_id.size() > 255) { + nhlog::db()->debug("Skipping device key query for user with invalid mxid: {}", user_id); + + mtx::http::ClientError err{}; + err.parse_error = "invalid mxid, more than 255 bytes"; + cb({}, err); + return; + } + mtx::requests::QueryKeys req; std::string last_changed; {