Skip to content

Commit 070fd4f

Browse files
committed
Do not rely on RoomAlias constructor to validate the Room alias, since there is no validation in release mode.
This is fixing the test in release mode.
1 parent 39b51b4 commit 070fd4f

File tree

3 files changed

+10
-7
lines changed

3 files changed

+10
-7
lines changed

features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/editroomaddress/EditRoomAddressPresenter.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ class EditRoomAddressPresenter @AssistedInject constructor(
9999
suspend {
100100
val savedCanonicalAlias = room.canonicalAlias
101101
val savedAliasFromHomeserver = room.firstAliasMatching(serverName)
102-
val newRoomAlias = client.roomAliasFromName(newRoomAddress).getOrThrow()
102+
val newRoomAlias = client.roomAliasFromName(newRoomAddress) ?: throw IllegalArgumentException("Invalid room address")
103103

104104
// First publish the new alias in the room directory
105105
room.publishRoomAliasInRoomDirectory(newRoomAlias).getOrThrow()

libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt

+8-5
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@
77

88
package io.element.android.libraries.matrix.api
99

10+
import io.element.android.libraries.core.data.tryOrNull
1011
import io.element.android.libraries.matrix.api.core.DeviceId
12+
import io.element.android.libraries.matrix.api.core.MatrixPatterns
1113
import io.element.android.libraries.matrix.api.core.ProgressCallback
1214
import io.element.android.libraries.matrix.api.core.RoomAlias
1315
import io.element.android.libraries.matrix.api.core.RoomId
@@ -172,11 +174,12 @@ fun MatrixClient.getRoomInfoFlow(roomIdOrAlias: RoomIdOrAlias): Flow<Optional<Ma
172174
}
173175

174176
/**
175-
* Returns a room alias from a room alias name.
177+
* Returns a room alias from a room alias name, or null if the name is not valid.
176178
* @param name the room alias name ie. the local part of the room alias.
177179
*/
178-
fun MatrixClient.roomAliasFromName(name: String): Result<RoomAlias> {
179-
return runCatching {
180-
RoomAlias("#$name:${userIdServerName()}")
181-
}
180+
fun MatrixClient.roomAliasFromName(name: String): RoomAlias? {
181+
return name.takeIf { it.isNotEmpty() }
182+
?.let { "#$it:${userIdServerName()}" }
183+
?.takeIf { MatrixPatterns.isRoomAlias(it) }
184+
?.let { tryOrNull { RoomAlias(it) } }
182185
}

libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/room/address/RoomAddressValidityEffect.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ fun RoomAddressValidityEffect(
3232
}
3333
// debounce the room address validation
3434
delay(300)
35-
val roomAlias = client.roomAliasFromName(newRoomAddress).getOrNull()
35+
val roomAlias = client.roomAliasFromName(newRoomAddress)
3636
if (roomAlias == null || !roomAliasHelper.isRoomAliasValid(roomAlias)) {
3737
onChange(RoomAddressValidity.InvalidSymbols)
3838
} else {

0 commit comments

Comments
 (0)