From edbf831a0fbd1a58636b88bd55a3bc101af6cc1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Damir=20Jeli=C4=87?= Date: Tue, 19 Apr 2022 13:53:28 +0200 Subject: [PATCH] fix(crypto): Make sure to sort the sessions by timestamp before encrypting This ensures that we're using the correct Session even if our store doesn't provide those in the correct order. The set is small anyways, so this shouldn't have any performance impact. --- crates/matrix-sdk-crypto/src/identities/device.rs | 3 ++- crates/matrix-sdk-crypto/src/session_manager/sessions.rs | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/crates/matrix-sdk-crypto/src/identities/device.rs b/crates/matrix-sdk-crypto/src/identities/device.rs index af946d340..39b4fd51d 100644 --- a/crates/matrix-sdk-crypto/src/identities/device.rs +++ b/crates/matrix-sdk-crypto/src/identities/device.rs @@ -525,7 +525,8 @@ impl ReadOnlyDevice { }; let session = if let Some(s) = store.get_sessions(&sender_key.to_base64()).await? { - let sessions = s.lock().await; + let mut sessions = s.lock().await; + sessions.sort_by_key(|s| *s.last_use_time); sessions.get(0).cloned() } else { None diff --git a/crates/matrix-sdk-crypto/src/session_manager/sessions.rs b/crates/matrix-sdk-crypto/src/session_manager/sessions.rs index 7fcc58360..b3afb1de2 100644 --- a/crates/matrix-sdk-crypto/src/session_manager/sessions.rs +++ b/crates/matrix-sdk-crypto/src/session_manager/sessions.rs @@ -84,7 +84,7 @@ impl SessionManager { if let Some(sessions) = sessions { let mut sessions = sessions.lock().await; - sessions.sort_by_key(|s| s.creation_time.clone()); + sessions.sort_by_key(|s| *s.creation_time); let session = sessions.get(0);