Skip to content

Commit 0381547

Browse files
committed
Fix canonical alias event check
The old version was checking all aliases instead of only the newly added ones that prevented modifying the event if one of current aliases became invalid
1 parent d6d576d commit 0381547

File tree

3 files changed

+29
-17
lines changed

3 files changed

+29
-17
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
@@ -320,7 +320,7 @@ default-features = false
320320

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

src/api/client/state.rs

Lines changed: 18 additions & 6 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,16 +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 mut aliases = canonical_alias_content.alt_aliases.clone();
323+
let current_event = services
324+
.state_accessor
325+
.room_state_get_content::<RoomCanonicalAliasEventContent>(
326+
room_id,
327+
&StateEventType::RoomCanonicalAlias,
328+
"",
329+
)
330+
.await
331+
.ok();
324332

325-
if let Some(alias) = canonical_alias_content.alias {
326-
aliases.push(alias);
327-
}
333+
let current_aliases: Vec<OwnedRoomAliasId> = current_event
334+
.map(|content| content.aliases().cloned().collect())
335+
.unwrap_or_default();
336+
337+
let aliases = canonical_alias_content
338+
.aliases()
339+
.filter(|alias| !current_aliases.contains(alias));
328340

329341
for alias in aliases {
330342
let (alias_room_id, _servers) = services
331343
.alias
332-
.resolve_alias(&alias)
344+
.resolve_alias(alias)
333345
.await
334346
.map_err(|e| {
335347
err!(Request(BadAlias("Failed resolving alias \"{alias}\": {e}")))

0 commit comments

Comments
 (0)