mirror of
https://github.com/Novaloop-AG/element-x-android.git
synced 2026-11-03 16:10:00 +00:00
Fix banned mime type errors in DefaultContentScannerService (#7255)
The content scanner allows disabling certain mime types for files in the set up HS, but it turns out for the scan operation instead of returning an `"is_valid": false` result in that case, it returns an error with a `MCS_MIME_TYPE_FORBIDDEN` reason. We need to handle that case as if it had returned the false `isValid` value.
This commit is contained in:
committed by
GitHub
parent
05917bd65f
commit
18034e02a2
+10
-2
@@ -10,6 +10,7 @@ package io.element.android.features.contentscanner.impl
|
|||||||
import io.element.android.features.contentscanner.api.ContentScannerService
|
import io.element.android.features.contentscanner.api.ContentScannerService
|
||||||
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
|
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
|
||||||
import io.element.android.libraries.matrix.api.core.EventId
|
import io.element.android.libraries.matrix.api.core.EventId
|
||||||
|
import io.element.android.libraries.matrix.api.exception.ClientException
|
||||||
import io.element.android.libraries.matrix.api.media.MediaSource
|
import io.element.android.libraries.matrix.api.media.MediaSource
|
||||||
import io.element.android.libraries.matrix.api.scanner.ContentScanner
|
import io.element.android.libraries.matrix.api.scanner.ContentScanner
|
||||||
import io.element.android.libraries.matrix.ui.media.contentvalidation.ContentValidationState
|
import io.element.android.libraries.matrix.ui.media.contentvalidation.ContentValidationState
|
||||||
@@ -42,10 +43,16 @@ class DefaultContentScannerService(
|
|||||||
contentValidationState.update(url, contentValidationValue)
|
contentValidationState.update(url, contentValidationValue)
|
||||||
}
|
}
|
||||||
.onFailure { exception ->
|
.onFailure { exception ->
|
||||||
if (exception is IOException) {
|
when (exception) {
|
||||||
|
is IOException -> {
|
||||||
// If it's an IO-related exception, we can retry later, so we don't store the error
|
// If it's an IO-related exception, we can retry later, so we don't store the error
|
||||||
contentValidationState.update(url, ContentValidationValue.Unknown)
|
contentValidationState.update(url, ContentValidationValue.Unknown)
|
||||||
} else {
|
}
|
||||||
|
is ClientException.ContentScanner if exception.reason.isDangerous() -> {
|
||||||
|
// It's a dangerous content (banned mime-type?), we mark it as invalid
|
||||||
|
contentValidationState.update(url, ContentValidationValue.Invalid)
|
||||||
|
}
|
||||||
|
else -> {
|
||||||
// For other exceptions, we cache the failure
|
// For other exceptions, we cache the failure
|
||||||
contentValidationState.update(url, ContentValidationValue.UnrecoverableError(exception))
|
contentValidationState.update(url, ContentValidationValue.UnrecoverableError(exception))
|
||||||
}
|
}
|
||||||
@@ -54,3 +61,4 @@ class DefaultContentScannerService(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|||||||
+4
@@ -7,9 +7,11 @@
|
|||||||
|
|
||||||
package io.element.android.libraries.matrix.impl.scanner
|
package io.element.android.libraries.matrix.impl.scanner
|
||||||
|
|
||||||
|
import io.element.android.libraries.core.extensions.mapFailure
|
||||||
import io.element.android.libraries.core.extensions.runCatchingExceptions
|
import io.element.android.libraries.core.extensions.runCatchingExceptions
|
||||||
import io.element.android.libraries.matrix.api.media.MediaSource
|
import io.element.android.libraries.matrix.api.media.MediaSource
|
||||||
import io.element.android.libraries.matrix.api.scanner.ContentScanner
|
import io.element.android.libraries.matrix.api.scanner.ContentScanner
|
||||||
|
import io.element.android.libraries.matrix.impl.exception.mapClientException
|
||||||
import org.matrix.rustcomponents.sdk.Client
|
import org.matrix.rustcomponents.sdk.Client
|
||||||
import org.matrix.rustcomponents.sdk.NoHandle
|
import org.matrix.rustcomponents.sdk.NoHandle
|
||||||
import org.matrix.rustcomponents.sdk.ContentScanner as RustScanner
|
import org.matrix.rustcomponents.sdk.ContentScanner as RustScanner
|
||||||
@@ -22,6 +24,8 @@ class RustContentScanner(
|
|||||||
override suspend fun scan(mediaSource: MediaSource): Result<Boolean> {
|
override suspend fun scan(mediaSource: MediaSource): Result<Boolean> {
|
||||||
return runCatchingExceptions {
|
return runCatchingExceptions {
|
||||||
rustScanner.scan(client, mediaSource.toRustMediaSource()).clean
|
rustScanner.scan(client, mediaSource.toRustMediaSource()).clean
|
||||||
|
}.mapFailure {
|
||||||
|
it.mapClientException()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user