From 6debfdf6d6172cec2d87fd1e780c3b347d41dc1d Mon Sep 17 00:00:00 2001 From: David Vacca Date: Mon, 22 Oct 2018 01:04:59 -0700 Subject: [PATCH] RN crash when processing Exception with null message Summary: This diff fixes a crash that happens when a component throws an exception that contains a null message Reviewed By: achen1 Differential Revision: D10429661 fbshipit-source-id: 9faed36906844b51f5a3dc2b3cbc80ede6b93457 --- .../src/main/java/com/facebook/react/devsupport/BUCK | 3 +++ .../react/devsupport/DevSupportManagerImpl.java | 11 +++++------ .../com/facebook/react/devsupport/RedBoxHandler.java | 3 ++- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/devsupport/BUCK b/ReactAndroid/src/main/java/com/facebook/react/devsupport/BUCK index 5cff33c82c5..c55a87ca018 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/devsupport/BUCK +++ b/ReactAndroid/src/main/java/com/facebook/react/devsupport/BUCK @@ -4,6 +4,9 @@ rn_android_library( name = "devsupport", srcs = glob(["*.java"]), manifest = "AndroidManifest.xml", + provided_deps = [ + react_native_dep("third-party/android/support/v4:lib-support-v4"), + ], visibility = [ "PUBLIC", ], diff --git a/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerImpl.java b/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerImpl.java index b925c24ba87..403e481bd75 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerImpl.java +++ b/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerImpl.java @@ -21,6 +21,7 @@ import android.content.pm.PackageManager; import android.hardware.SensorManager; import android.net.Uri; import android.os.AsyncTask; +import android.support.annotation.Nullable; import android.util.Pair; import android.widget.Toast; import com.facebook.common.logging.FLog; @@ -31,7 +32,6 @@ import com.facebook.react.R; import com.facebook.react.bridge.CatalystInstance; import com.facebook.react.bridge.DefaultNativeModuleCallExceptionHandler; import com.facebook.react.bridge.JavaJSExecutor; -import com.facebook.react.bridge.JavaScriptContextHolder; import com.facebook.react.bridge.NativeDeltaClient; import com.facebook.react.bridge.ReactContext; import com.facebook.react.bridge.ReactMarker; @@ -64,7 +64,6 @@ import java.util.Map; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; -import javax.annotation.Nullable; import okhttp3.MediaType; import okhttp3.OkHttpClient; import okhttp3.Request; @@ -295,7 +294,7 @@ public class DevSupportManagerImpl implements @Override public void log(Exception e) { - StringBuilder message = new StringBuilder(e.getMessage()); + StringBuilder message = new StringBuilder(e.getMessage() == null ? "Exception in native call from JS" : e.getMessage()); Throwable cause = e.getCause(); while (cause != null) { message.append("\n\n").append(cause.getMessage()); @@ -320,7 +319,7 @@ public class DevSupportManagerImpl implements } @Override - public void showNewJavaError(String message, Throwable e) { + public void showNewJavaError(@Nullable String message, Throwable e) { FLog.e(ReactConstants.TAG, "Exception in native call", e); showNewError(message, StackTraceHelper.convertJavaStackTrace(e), JAVA_ERROR_COOKIE, ErrorType.NATIVE); } @@ -414,7 +413,7 @@ public class DevSupportManagerImpl implements } private void showNewError( - final String message, + @Nullable final String message, final StackFrame[] stack, final int errorCookie, final ErrorType errorType) { @@ -893,7 +892,7 @@ public class DevSupportManagerImpl implements } private void updateLastErrorInfo( - final String message, + @Nullable final String message, final StackFrame[] stack, final int errorCookie, final ErrorType errorType) { diff --git a/ReactAndroid/src/main/java/com/facebook/react/devsupport/RedBoxHandler.java b/ReactAndroid/src/main/java/com/facebook/react/devsupport/RedBoxHandler.java index e723713dc60..625c59f18e5 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/devsupport/RedBoxHandler.java +++ b/ReactAndroid/src/main/java/com/facebook/react/devsupport/RedBoxHandler.java @@ -8,6 +8,7 @@ package com.facebook.react.devsupport; import android.content.Context; +import android.support.annotation.Nullable; import android.text.SpannedString; import com.facebook.react.devsupport.interfaces.StackFrame; @@ -42,7 +43,7 @@ public interface RedBoxHandler { /** * Handle the information from the redbox. */ - void handleRedbox(String title, StackFrame[] stack, ErrorType errorType); + void handleRedbox(@Nullable String title, StackFrame[] stack, ErrorType errorType); /** * Whether the report feature is enabled.