Skip to content

Commit 5b5d6d4

Browse files
committed
fixup! fix: Use the DisplayName struct to protect against homoglyph attacks
1 parent 75cdfa1 commit 5b5d6d4

File tree

1 file changed

+11
-10
lines changed
  • crates/matrix-sdk-indexeddb/src/state_store

1 file changed

+11
-10
lines changed

crates/matrix-sdk-indexeddb/src/state_store/mod.rs

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
// limitations under the License.
1414

1515
use std::{
16-
collections::{BTreeMap, BTreeSet, HashSet},
16+
collections::{BTreeMap, BTreeSet, HashMap, HashSet},
1717
sync::Arc,
1818
};
1919

@@ -23,7 +23,7 @@ use gloo_utils::format::JsValueSerdeExt;
2323
use growable_bloom_filter::GrowableBloom;
2424
use indexed_db_futures::prelude::*;
2525
use matrix_sdk_base::{
26-
deserialized_responses::RawAnySyncOrStrippedState,
26+
deserialized_responses::{DisplayName, RawAnySyncOrStrippedState},
2727
store::{
2828
ChildTransactionId, ComposerDraft, DependentQueuedRequest, DependentQueuedRequestKind,
2929
QueuedRequest, QueuedRequestKind, SentRequestKey, SerializableEventContent,
@@ -1118,12 +1118,12 @@ impl_state_store!({
11181118
async fn get_users_with_display_name(
11191119
&self,
11201120
room_id: &RoomId,
1121-
display_name: &str,
1121+
display_name: &DisplayName,
11221122
) -> Result<BTreeSet<OwnedUserId>> {
11231123
self.inner
11241124
.transaction_on_one_with_mode(keys::DISPLAY_NAMES, IdbTransactionMode::Readonly)?
11251125
.object_store(keys::DISPLAY_NAMES)?
1126-
.get(&self.encode_key(keys::DISPLAY_NAMES, (room_id, display_name)))?
1126+
.get(&self.encode_key(keys::DISPLAY_NAMES, (room_id, display_name.as_str())))?
11271127
.await?
11281128
.map(|f| self.deserialize_value::<BTreeSet<OwnedUserId>>(&f))
11291129
.unwrap_or_else(|| Ok(Default::default()))
@@ -1132,26 +1132,27 @@ impl_state_store!({
11321132
async fn get_users_with_display_names<'a>(
11331133
&self,
11341134
room_id: &RoomId,
1135-
display_names: &'a [String],
1136-
) -> Result<BTreeMap<&'a str, BTreeSet<OwnedUserId>>> {
1135+
display_names: &'a [DisplayName],
1136+
) -> Result<HashMap<&'a DisplayName, BTreeSet<OwnedUserId>>> {
1137+
let mut map = HashMap::new();
1138+
11371139
if display_names.is_empty() {
1138-
return Ok(BTreeMap::new());
1140+
return Ok(map);
11391141
}
11401142

11411143
let txn = self
11421144
.inner
11431145
.transaction_on_one_with_mode(keys::DISPLAY_NAMES, IdbTransactionMode::Readonly)?;
11441146
let store = txn.object_store(keys::DISPLAY_NAMES)?;
11451147

1146-
let mut map = BTreeMap::new();
11471148
for display_name in display_names {
11481149
if let Some(user_ids) = store
1149-
.get(&self.encode_key(keys::DISPLAY_NAMES, (room_id, display_name)))?
1150+
.get(&self.encode_key(keys::DISPLAY_NAMES, (room_id, display_name.as_str())))?
11501151
.await?
11511152
.map(|f| self.deserialize_value::<BTreeSet<OwnedUserId>>(&f))
11521153
.transpose()?
11531154
{
1154-
map.insert(display_name.as_ref(), user_ids);
1155+
map.insert(display_name, user_ids);
11551156
}
11561157
}
11571158

0 commit comments

Comments
 (0)