From 3cc368754b0f42e51aa99a5d43719a8a60403cd0 Mon Sep 17 00:00:00 2001 From: LoveSy Date: Wed, 11 Aug 2021 19:05:42 +0800 Subject: [PATCH] [core] Check apk path is not null (#885) --- .../org/lsposed/lspd/service/ConfigManager.java | 7 ++++++- .../lsposed/lspd/service/LSPManagerService.java | 17 +++-------------- 2 files changed, 9 insertions(+), 15 deletions(-) diff --git a/core/src/main/java/org/lsposed/lspd/service/ConfigManager.java b/core/src/main/java/org/lsposed/lspd/service/ConfigManager.java index 1654f2e2..d2b35805 100644 --- a/core/src/main/java/org/lsposed/lspd/service/ConfigManager.java +++ b/core/src/main/java/org/lsposed/lspd/service/ConfigManager.java @@ -476,7 +476,7 @@ public class ConfigManager { continue; } var path = apkPath; - if (!new File(path).exists()) { + if (path == null || !new File(path).exists()) { path = getModuleApkPath(pkgInfo.applicationInfo); if (path == null) obsoleteModules.add(packageName); else obsoletePaths.put(packageName, path); @@ -621,6 +621,7 @@ public class ConfigManager { @Nullable private PreLoadedApk loadModule(String path) { + if (path == null) return null; var file = new PreLoadedApk(); var preLoadedDexes = new ArrayList(); var moduleClassNames = new ArrayList(1); @@ -685,6 +686,10 @@ public class ConfigManager { apks[info.splitSourceDirs.length] = info.sourceDir; } else apks = new String[]{info.sourceDir}; var apkPath = Arrays.stream(apks).parallel().filter(apk -> { + if (apk == null) { + Log.w(TAG, info.packageName + " has null apk path???"); + return false; + } try (var zip = new ZipFile(apk)) { return zip.getEntry("assets/xposed_init") != null; } catch (IOException e) { diff --git a/core/src/main/java/org/lsposed/lspd/service/LSPManagerService.java b/core/src/main/java/org/lsposed/lspd/service/LSPManagerService.java index 9bf759fc..b4407d7f 100644 --- a/core/src/main/java/org/lsposed/lspd/service/LSPManagerService.java +++ b/core/src/main/java/org/lsposed/lspd/service/LSPManagerService.java @@ -25,7 +25,6 @@ import static org.lsposed.lspd.service.ServiceManager.TAG; import android.app.IServiceConnection; import android.content.ComponentName; import android.content.Intent; -import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; @@ -124,15 +123,8 @@ public class LSPManagerService extends ILSPManagerService.Stub { @Override public boolean enableModule(String packageName) throws RemoteException { PackageInfo pkgInfo = PackageService.getPackageInfo(packageName, PackageService.MATCH_ALL_FLAGS, 0); - if (pkgInfo != null) { - ApplicationInfo appInfo; - try { - appInfo = pkgInfo.applicationInfo; - } catch (Throwable t) { - Log.wtf(TAG, t); - throw t; - } - return ConfigManager.getInstance().enableModule(packageName, appInfo); + if (pkgInfo != null && pkgInfo.applicationInfo != null) { + return ConfigManager.getInstance().enableModule(packageName, pkgInfo.applicationInfo); } else { return false; } @@ -247,7 +239,7 @@ public class LSPManagerService extends ILSPManagerService.Stub { } @Override - public boolean systemServerRequested() throws RemoteException { + public boolean systemServerRequested() { return ServiceManager.systemServerRequested(); } @@ -271,9 +263,6 @@ public class LSPManagerService extends ILSPManagerService.Stub { @Override public boolean dex2oatFlagsLoaded() { -// var splitFlags = new ArrayList<>(Arrays.asList(flags.split(" "))); -// splitFlags.add(PROP_VALUE); -// SystemProperties.set(PROP_NAME, String.join(" ", splitFlags)); return SystemProperties.get(PROP_NAME).contains(PROP_VALUE); } }