From 6f6e8945f75c6e6807dd2a400d500ee4add46754 Mon Sep 17 00:00:00 2001 From: Narayan Kamath Date: Thu, 6 Jul 2017 12:38:55 +0100 Subject: [PATCH] WebViewZygoteInit: minor cleanup to handlePreloadPackage. Make sure that the preload method returns a boolean to avoid the possibility of a NullPointerException or a ClassCastException during the boxing / casting of its return value. Test: manual Change-Id: I483edc8f8726de4359fc37304ca7019024eaf577 --- .../internal/os/WebViewZygoteInit.java | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/core/java/com/android/internal/os/WebViewZygoteInit.java b/core/java/com/android/internal/os/WebViewZygoteInit.java index 58e4a3ed8deb8..d958cbb29d17c 100644 --- a/core/java/com/android/internal/os/WebViewZygoteInit.java +++ b/core/java/com/android/internal/os/WebViewZygoteInit.java @@ -29,7 +29,7 @@ import android.webkit.WebViewFactoryProvider; import java.io.DataOutputStream; import java.io.File; import java.io.IOException; -import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; /** * Startup class for the WebView zygote process. @@ -92,13 +92,18 @@ class WebViewZygoteInit { try { Class providerClass = WebViewFactory.getWebViewProviderClass(loader); - Object result = providerClass.getMethod("preloadInZygote").invoke(null); - preloadSucceeded = ((Boolean) result).booleanValue(); - if (!preloadSucceeded) { - Log.e(TAG, "preloadInZygote returned false"); + Method preloadInZygote = providerClass.getMethod("preloadInZygote"); + preloadInZygote.setAccessible(true); + if (preloadInZygote.getReturnType() != Boolean.TYPE) { + Log.e(TAG, "Unexpected return type: preloadInZygote must return boolean"); + } else { + preloadSucceeded = (boolean) providerClass.getMethod("preloadInZygote") + .invoke(null); + if (!preloadSucceeded) { + Log.e(TAG, "preloadInZygote returned false"); + } } - } catch (ClassNotFoundException | NoSuchMethodException | SecurityException | - IllegalAccessException | InvocationTargetException e) { + } catch (ReflectiveOperationException e) { Log.e(TAG, "Exception while preloading package", e); }