From 484fbe92732795a9bba7d7a89056bb4bd180b479 Mon Sep 17 00:00:00 2001 From: Dimitry Ivanov Date: Wed, 22 Feb 2017 15:39:42 -0800 Subject: [PATCH] Add isBundled argument to LoadedApk.makePaths call There is a disconnect between the way webview created classloader and the way makePaths decides if paths are intended for bundled app. This change moves decision making out of makePaths method which allows WebViewZygote to pass correct argument and have makePath omit java.library.path for libPaths Bug: http://b/35426785 Test: manual Change-Id: Iab5a18c0091d0193dafa750498eb00f378411ba0 (cherry picked from commit 638d81009918eae44eec3261e235b78eae44331d) --- core/java/android/app/LoadedApk.java | 20 +++++++++++++++----- core/java/android/webkit/WebViewZygote.java | 2 +- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/core/java/android/app/LoadedApk.java b/core/java/android/app/LoadedApk.java index afe9651d82f52..e00a7f0e4ab91 100644 --- a/core/java/android/app/LoadedApk.java +++ b/core/java/android/app/LoadedApk.java @@ -266,7 +266,7 @@ public final class LoadedApk { setApplicationInfo(aInfo); final List newPaths = new ArrayList<>(); - makePaths(mActivityThread, aInfo, newPaths, null /*libPaths*/); + makePaths(mActivityThread, aInfo, newPaths); final List addedPaths = new ArrayList<>(newPaths.size()); if (oldPaths != null) { @@ -314,8 +314,17 @@ public final class LoadedApk { mCredentialProtectedDataDirFile = FileUtils.newFileOrNull(aInfo.credentialProtectedDataDir); } - public static void makePaths(ActivityThread activityThread, ApplicationInfo aInfo, - List outZipPaths, List outLibPaths) { + public static void makePaths(ActivityThread activityThread, + ApplicationInfo aInfo, + List outZipPaths) { + makePaths(activityThread, false, aInfo, outZipPaths, null); + } + + public static void makePaths(ActivityThread activityThread, + boolean isBundledApp, + ApplicationInfo aInfo, + List outZipPaths, + List outLibPaths) { final String appDir = aInfo.sourceDir; final String[] splitAppDirs = aInfo.splitSourceDirs; final String libDir = aInfo.nativeLibraryDir; @@ -398,7 +407,7 @@ public final class LoadedApk { } } - if (aInfo.isSystemApp() && !aInfo.isUpdatedSystemApp()) { + if (isBundledApp) { // Add path to system libraries to libPaths; // Access to system libs should be limited // to bundled applications; this is why updated @@ -471,11 +480,12 @@ public final class LoadedApk { // space and initialize to a small value (instead of incurring growth code). final List zipPaths = new ArrayList<>(10); final List libPaths = new ArrayList<>(10); - makePaths(mActivityThread, mApplicationInfo, zipPaths, libPaths); final boolean isBundledApp = mApplicationInfo.isSystemApp() && !mApplicationInfo.isUpdatedSystemApp(); + makePaths(mActivityThread, isBundledApp, mApplicationInfo, zipPaths, libPaths); + String libraryPermittedPath = mDataDir; if (isBundledApp) { // This is necessary to grant bundled apps access to diff --git a/core/java/android/webkit/WebViewZygote.java b/core/java/android/webkit/WebViewZygote.java index 2d6f44352ba7d..f9d733201e591 100644 --- a/core/java/android/webkit/WebViewZygote.java +++ b/core/java/android/webkit/WebViewZygote.java @@ -176,7 +176,7 @@ public class WebViewZygote { // paths and pass them to the zygote as strings. final List zipPaths = new ArrayList<>(10); final List libPaths = new ArrayList<>(10); - LoadedApk.makePaths(null, sPackage.applicationInfo, zipPaths, libPaths); + LoadedApk.makePaths(null, false, sPackage.applicationInfo, zipPaths, libPaths); final String librarySearchPath = TextUtils.join(File.pathSeparator, libPaths); final String zip = (zipPaths.size() == 1) ? zipPaths.get(0) : TextUtils.join(File.pathSeparator, zipPaths);