Skip to content

Commit 957b55c

Browse files
Petter Hesselbergfacebook-github-bot
Petter Hesselberg
authored andcommitted
Don't crash in StackTraceHelper.convertJsStackTrace
Summary: Don't crash in `StackTraceHelper.convertJsStackTrace` on missing `lineNumber` I've seen the native Android app crash upon displaying a stack trace because of this bug. Incidental and unrelated change: Refactor `StackTraceHelper.formatFrameSource` to use `StringBuilder` Closes #12920 Differential Revision: D4709273 fbshipit-source-id: 95b3eb303f259460e33d8ee32a2db652360c645d
1 parent 87137ca commit 957b55c

File tree

1 file changed

+20
-9
lines changed

1 file changed

+20
-9
lines changed

ReactAndroid/src/main/java/com/facebook/react/devsupport/StackTraceHelper.java

+20-9
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@
2222
*/
2323
public class StackTraceHelper {
2424

25+
public static final java.lang.String COLUMN_KEY = "column";
26+
public static final java.lang.String LINE_NUMBER_KEY = "lineNumber";
27+
2528
/**
2629
* Represents a generic entry in a stack trace, be it originally from JS or Java.
2730
*/
@@ -101,10 +104,13 @@ public static StackFrame[] convertJsStackTrace(@Nullable ReadableArray stack) {
101104
ReadableMap frame = stack.getMap(i);
102105
String methodName = frame.getString("methodName");
103106
String fileName = frame.getString("file");
104-
int lineNumber = frame.getInt("lineNumber");
107+
int lineNumber = -1;
108+
if (frame.hasKey(LINE_NUMBER_KEY) && !frame.isNull(LINE_NUMBER_KEY)) {
109+
lineNumber = frame.getInt(LINE_NUMBER_KEY);
110+
}
105111
int columnNumber = -1;
106-
if (frame.hasKey("column") && !frame.isNull("column")) {
107-
columnNumber = frame.getInt("column");
112+
if (frame.hasKey(COLUMN_KEY) && !frame.isNull(COLUMN_KEY)) {
113+
columnNumber = frame.getInt(COLUMN_KEY);
108114
}
109115
result[i] = new StackFrameImpl(fileName, methodName, lineNumber, columnNumber);
110116
}
@@ -132,12 +138,17 @@ public static StackFrame[] convertJavaStackTrace(Throwable exception) {
132138
* Format a {@link StackFrame} to a String (method name is not included).
133139
*/
134140
public static String formatFrameSource(StackFrame frame) {
135-
String lineInfo = "";
136-
final int column = frame.getColumn();
137-
// If the column is 0, don't show it in red box.
138-
final String columnString = column <= 0 ? "" : ":" + column;
139-
lineInfo += frame.getFileName() + ":" + frame.getLine() + columnString;
140-
return lineInfo;
141+
StringBuilder lineInfo = new StringBuilder();
142+
lineInfo.append(frame.getFileName());
143+
final int line = frame.getLine();
144+
if (line > 0) {
145+
lineInfo.append(":").append(line);
146+
final int column = frame.getColumn();
147+
if (column > 0) {
148+
lineInfo.append(":").append(column);
149+
}
150+
}
151+
return lineInfo.toString();
141152
}
142153

143154
/**

0 commit comments

Comments
 (0)