feat: normalize /sdcard paths to device canonical external storage#558
Draft
djbclark wants to merge 2 commits into
Draft
feat: normalize /sdcard paths to device canonical external storage#558djbclark wants to merge 2 commits into
djbclark wants to merge 2 commits into
Conversation
ScriptIntents now normalizes /sdcard/ and /mnt/sdcard/ path prefixes to Environment.getExternalStorageDirectory() when the file doesn't exist at the given path. This is a no-op on standard Android (where /sdcard is a symlink) but fixes script execution on devices without the symlink (Fire OS, some custom ROMs). EnvironmentUtils.normalizePath() checks File(path).exists() first to avoid unnecessary remapping on devices where the given path is valid.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
On standard Android,
/sdcardis a symlink to/storage/emulated/0, soFile("/sdcard/...").exists()works. On some devices (Fire OS, some custom ROMs), this symlink doesn't exist —Environment.getExternalStorageDirectory()returns a different canonical path.This PR adds
EnvironmentUtils.normalizePath()which:File(path).exists()first — returns original path unchanged if valid (no-op on standard Android)/sdcard/and/mnt/sdcard/prefixes withEnvironment.getExternalStorageDirectory()Applied in
ScriptIntents.ktso scripts launched viaam start -d file:///sdcard/...from external tools work correctly on all devices.Two utility files changed, 29 lines added.
Security update:
normalizePath()now resolves..traversal components by callingFile.canonicalPathon existing paths, wrapped in try-catch for robustness.