Fix edge case that could lead to no new one time keys being uploaded

This commit is contained in:
Nicolas Werner 2021-07-24 14:59:14 +02:00
parent ace16b8c4d
commit a61678242b
No known key found for this signature in database
GPG key ID: C8D75E610773F2D9

View file

@ -929,19 +929,22 @@ ChatPage::currentPresence() const
void void
ChatPage::ensureOneTimeKeyCount(const std::map<std::string, uint16_t> &counts) ChatPage::ensureOneTimeKeyCount(const std::map<std::string, uint16_t> &counts)
{ {
for (const auto &entry : counts) { uint16_t count = 0;
if (entry.second < MAX_ONETIME_KEYS) { if (auto c = counts.find(mtx::crypto::SIGNED_CURVE25519); c != counts.end())
const int nkeys = MAX_ONETIME_KEYS - entry.second; count = c->second;
nhlog::crypto()->info("uploading {} {} keys", nkeys, entry.first); if (count < MAX_ONETIME_KEYS) {
const int nkeys = MAX_ONETIME_KEYS - count;
nhlog::crypto()->info(
"uploading {} {} keys", nkeys, mtx::crypto::SIGNED_CURVE25519);
olm::client()->generate_one_time_keys(nkeys); olm::client()->generate_one_time_keys(nkeys);
http::client()->upload_keys( http::client()->upload_keys(
olm::client()->create_upload_keys_request(), olm::client()->create_upload_keys_request(),
[](const mtx::responses::UploadKeys &, mtx::http::RequestErr err) { [](const mtx::responses::UploadKeys &, mtx::http::RequestErr err) {
if (err) { if (err) {
nhlog::crypto()->warn( nhlog::crypto()->warn("failed to update one-time keys: {} {} {}",
"failed to update one-time keys: {} {} {}",
err->matrix_error.error, err->matrix_error.error,
static_cast<int>(err->status_code), static_cast<int>(err->status_code),
static_cast<int>(err->error_code)); static_cast<int>(err->error_code));
@ -954,7 +957,6 @@ ChatPage::ensureOneTimeKeyCount(const std::map<std::string, uint16_t> &counts)
olm::mark_keys_as_published(); olm::mark_keys_as_published();
}); });
} }
}
} }
void void