Avoid crashing if loading non-read-only private extension
Fixes #10252
Cette révision appartient à :
Parent
446b146f95
révision
80d6d412f3
1 fichiers modifiés avec 11 ajouts et 1 suppressions
|
@ -141,6 +141,11 @@ internal object ExtensionLoader {
|
|||
?.asSequence()
|
||||
?.filter { it.isFile && it.extension == PRIVATE_EXTENSION_EXTENSION }
|
||||
?.mapNotNull {
|
||||
// Just in case, since Android 14+ requires them to be read-only
|
||||
if (it.canWrite()) {
|
||||
it.setReadOnly()
|
||||
}
|
||||
|
||||
val path = it.absolutePath
|
||||
pkgManager.getPackageArchiveInfo(path, PACKAGE_FLAGS)
|
||||
?.apply { applicationInfo.fixBasePaths(path) }
|
||||
|
@ -277,7 +282,12 @@ internal object ExtensionLoader {
|
|||
val hasReadme = appInfo.metaData.getInt(METADATA_HAS_README, 0) == 1
|
||||
val hasChangelog = appInfo.metaData.getInt(METADATA_HAS_CHANGELOG, 0) == 1
|
||||
|
||||
val classLoader = PathClassLoader(appInfo.sourceDir, null, context.classLoader)
|
||||
val classLoader = try {
|
||||
PathClassLoader(appInfo.sourceDir, null, context.classLoader)
|
||||
} catch (e: Exception) {
|
||||
logcat(LogPriority.ERROR, e) { "Extension load error: $extName ($pkgName)" }
|
||||
return LoadResult.Error
|
||||
}
|
||||
|
||||
val sources = appInfo.metaData.getString(METADATA_SOURCE_CLASS)!!
|
||||
.split(";")
|
||||
|
|
Référencer dans un nouveau ticket