Skip to content

Conversation

d4rken
Copy link
Member

@d4rken d4rken commented Jul 3, 2025

Propagate exceptions via LocalPathLookupResult to prevent IPC from crashing. Client-side should get ReadException now instead of DeadObjectException.

This commit modifies the IPC mechanism for LocalPathLookup to also transmit exceptions. It introduces a sealed class LocalPathLookupResult which can be either a Success (containing the LocalPathLookup) or an Error (containing exception details).

The LocalPathLookupIPCFlow is updated to serialize and deserialize LocalPathLookupResult instances, allowing exceptions from the producing flow to be re-thrown in the collecting flow. PathException and its subclasses are now annotated with @Keep.

…/Root services.

Propagate exceptions via LocalPathLookupResult to prevent IPC from crashing. Client-side should get ReadException now instead of DeadObjectException.

This commit modifies the IPC mechanism for `LocalPathLookup` to also transmit exceptions. It introduces a sealed class `LocalPathLookupResult` which can be either a `Success` (containing the `LocalPathLookup`) or an `Error` (containing exception details).

The `LocalPathLookupIPCFlow` is updated to serialize and deserialize `LocalPathLookupResult` instances, allowing exceptions from the producing flow to be re-thrown in the collecting flow. `PathException` and its subclasses are now annotated with `@Keep`.
@d4rken d4rken added bug Something isn't working as expected c: IO SAF/Normal/Root access Root ADB ADB/Shizuku related labels Jul 3, 2025
@d4rken
Copy link
Member Author

d4rken commented Jul 3, 2025

Calling the DirectFileWalker on a start path that does not exist would lead to an unhandled exception that crashes the Shizuku (or root) based service.

2025-06-25T10:09:34.978Z  E/SDMSE:FileOps:Service:Host:ADB: toRemoteInputStream failed: eu.darken.sdmse.common.files.ReadException: Does not exist or can't be read <-> /storage/emulated/0/.mixplorer
	at com.airbnb.lottie.L.performLookup(Unknown Source:130)
	at eu.darken.sdmse.common.files.local.DirectLocalWalker.collectSafely(Unknown Source:118)
	at kotlinx.coroutines.flow.AbstractFlow.collect(Unknown Source:68)
	at eu.darken.sdmse.common.flow.ChunkedFlowKt$chunked$1.invokeSuspend(Unknown Source:55)
	at eu.darken.sdmse.common.flow.ChunkedFlowKt$chunked$1.invoke(Unknown Source:12)
	at kotlinx.coroutines.flow.SafeFlow.collectSafely(Unknown Source:2)
	at kotlinx.coroutines.flow.AbstractFlow.collect(Unknown Source:68)
	at kotlinx.coroutines.flow.FlowKt__MergeKt$flatMapMerge$$inlined$map$1.collect(Unknown Source:15)
	at kotlinx.coroutines.flow.FlowKt__EmittersKt$onCompletion$$inlined$unsafeFlow$1.collect(Unknown Source:91)
	at kotlinx.coroutines.flow.FlowKt.catchImpl(Unknown Source:70)
	at kotlinx.coroutines.flow.FlowKt__MergeKt$flatMapMerge$$inlined$map$1.collect(Unknown Source:358)
	at kotlinx.coroutines.flow.FlowKt__CollectKt$launchIn$1.invokeSuspend(Unknown Source:32)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(Unknown Source:8)
	at kotlinx.coroutines.DispatchedTask.run(Unknown Source:116)
	at com.google.android.gms.tasks.zzi.run(Unknown Source:52)
	at kotlinx.coroutines.scheduling.TaskImpl.run(Unknown Source:2)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(Unknown Source:95)

@d4rken d4rken merged commit 4d0d500 into main Jul 3, 2025
16 checks passed
@d4rken d4rken deleted the adb-root-error-handling branch July 3, 2025 16:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
ADB ADB/Shizuku related bug Something isn't working as expected c: IO SAF/Normal/Root access Root
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant