From a863aeba6893cabbb05ac5a8fa692fee0d62f60e Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Mon, 4 Sep 2023 16:41:19 +0200 Subject: [PATCH] filter out empty stack frames --- flutter/lib/src/jvm/jvm_exception.dart | 7 ++++-- flutter/test/jvm/jvm_exception_test.dart | 29 ++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/flutter/lib/src/jvm/jvm_exception.dart b/flutter/lib/src/jvm/jvm_exception.dart index adaf71cac1..a26a15af4a 100644 --- a/flutter/lib/src/jvm/jvm_exception.dart +++ b/flutter/lib/src/jvm/jvm_exception.dart @@ -256,8 +256,11 @@ class JvmException { frames.add(trimmed); } - final thisExceptionFrames = - thisException.map((e) => JvmFrame.parse(e)).toList(growable: false); + final thisExceptionFrames = thisException + .map((e) => JvmFrame.parse(e)) + .where( + (e) => e.originalFrame.trim() != 'at' && e.originalFrame.isNotEmpty) + .toList(growable: false); final suppressedExceptions = supressed .map((e) => JvmException.parse(e.join(_newLine))) diff --git a/flutter/test/jvm/jvm_exception_test.dart b/flutter/test/jvm/jvm_exception_test.dart index 3202da097d..c5632d9894 100644 --- a/flutter/test/jvm/jvm_exception_test.dart +++ b/flutter/test/jvm/jvm_exception_test.dart @@ -85,6 +85,17 @@ void main() { expect(exception.stackTrace[0].fileName, 'StandardMessageCodec.java'); expect(exception.stackTrace[0].lineNumber, 292); }); + + test('parse drops frames with `at ` and empty original frame', () { + final exception = + JvmException.parse(platformExceptionWithEmptyLastStackFrame); + expect(exception.stackTrace.length, 13); + expect(exception.stackTrace.last.className, + 'com.android.internal.os.ZygoteInit'); + expect(exception.stackTrace.last.fileName, 'ZygoteInit.java'); + expect(exception.stackTrace.last.method, 'main'); + expect(exception.stackTrace.last.lineNumber, 936); + }); } const javaExceptionWithCauses = ''' @@ -194,3 +205,21 @@ java.lang.IllegalArgumentException: Unsupported value: '[Ljava.lang.StackTraceEl at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit\$MethodAndArgsCaller.run(RuntimeInit.java:556) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1037)'''; + +const platformExceptionWithEmptyLastStackFrame = ''' +java.lang.RuntimeException: Catch this platform exception! + at io.sentry.samples.flutter.MainActivity\$configureFlutterEngine\$1.onMethodCall(MainActivity.kt:40) + at io.flutter.plugin.common.MethodChannel\$IncomingMethodCallHandler.onMessage(MethodChannel.java:258) + at io.flutter.embedding.engine.dart.DartMessenger.invokeHandler(DartMessenger.java:295) + at io.flutter.embedding.engine.dart.DartMessenger.lambda\$dispatchMessageToQueue\$0\$io-flutter-embedding-engine-dart-DartMessenger(DartMessenger.java:322) + at io.flutter.embedding.engine.dart.DartMessenger\$\$ExternalSyntheticLambda0.run(Unknown Source:12) + at android.os.Handler.handleCallback(Handler.java:942) + at android.os.Handler.dispatchMessage(Handler.java:99) + at android.os.Looper.loopOnce(Looper.java:201) + at android.os.Looper.loop(Looper.java:288) + at android.app.ActivityThread.main(ActivityThread.java:7872) + at java.lang.reflect.Method.invoke + at com.android.internal.os.RuntimeInit\$MethodAndArgsCaller.run(RuntimeInit.java:548) + at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936) + at + ''';