Skip to content

Commit f24c625

Browse files
committed
Fix canonical alias event check bug that prevented modifying aliases if one of current aliases becomes invalid
1 parent be4d928 commit f24c625

File tree

3 files changed

+18
-26
lines changed

3 files changed

+18
-26
lines changed

Cargo.lock

Lines changed: 10 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -321,7 +321,7 @@ default-features = false
321321

322322
[workspace.dependencies.ruma]
323323
git = "https://github.com/matrix-construct/ruma"
324-
rev = "2f53677f4d621cb4560119c5938888c9ce983e56"
324+
rev = "3cb939f5c8a67197433cbb3dc7e256f0ddaee978"
325325
features = [
326326
"__compat",
327327
"appservice-api-c",

src/api/client/state.rs

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use axum::extract::State;
22
use futures::{FutureExt, TryFutureExt, TryStreamExt};
33
use ruma::{
4-
OwnedEventId, RoomId, UserId,
4+
OwnedEventId, OwnedRoomAliasId, RoomId, UserId,
55
api::client::state::{get_state_event_for_key, get_state_events, send_state_event},
66
events::{
77
AnyStateEventContent, StateEventType,
@@ -320,36 +320,28 @@ async fn allowed_to_send_state_event(
320320
| StateEventType::RoomCanonicalAlias => {
321321
match json.deserialize_as_unchecked::<RoomCanonicalAliasEventContent>() {
322322
| Ok(canonical_alias_content) => {
323-
let current_aliases = services
323+
let current_event = services
324324
.state_accessor
325325
.room_state_get_content::<RoomCanonicalAliasEventContent>(
326326
room_id,
327327
&StateEventType::RoomCanonicalAlias,
328328
"",
329329
)
330330
.await
331-
.ok()
332-
.map(|content| {
333-
let mut aliases = content.alt_aliases;
331+
.ok();
334332

335-
if let Some(alias) = content.alias {
336-
aliases.push(alias);
337-
}
338-
339-
aliases
340-
})
333+
let current_aliases: Vec<OwnedRoomAliasId> = current_event
334+
.map(|content| content.aliases().cloned().collect())
341335
.unwrap_or_default();
342336

343337
let aliases = canonical_alias_content
344-
.alt_aliases
345-
.iter()
346-
.chain(canonical_alias_content.alias.iter())
338+
.aliases()
347339
.filter(|alias| !current_aliases.contains(alias));
348340

349341
for alias in aliases {
350342
let (alias_room_id, _servers) = services
351343
.alias
352-
.resolve_alias(&alias)
344+
.resolve_alias(alias)
353345
.await
354346
.map_err(|e| {
355347
err!(Request(BadAlias("Failed resolving alias \"{alias}\": {e}")))

0 commit comments

Comments
 (0)