Status Update
Comments
ag...@google.com <ag...@google.com>
mk...@google.com <mk...@google.com>
mk...@google.com <mk...@google.com> #2
Thank you for the report. This looks looks like something in the class file that our class file verification cannot handle. The failing_bytecode.txt
does not have all the details, so will it be possible for you to share the binary class file for the class kbbbbb.kggkkk
? You can share it privately with javap
with the -v
option (javap -v -cp <the jar> kbbbbb.kggkkk
.
The deobfuscated R8 stack trace is:
Caused by: com.android.tools.r8.errors.Unreachable: Invalid descriptor char 'N'
at com.android.tools.r8.ir.code.MemberType.fromTypeDescriptorChar(MemberType.java:98)
at com.android.tools.r8.ir.code.MemberType.fromDexType(MemberType.java:103)
at com.android.tools.r8.graph.CfCode.isAssignable(CfCode.java:918)
at com.android.tools.r8.graph.CfCode.lambda$isAssignablePredicate$8(CfCode.java:887)
at com.android.tools.r8.cf.code.CfFrameVerificationHelper.canBeAssigned(CfFrameVerificationHelper.java:375)
at com.android.tools.r8.cf.code.CfFrameVerificationHelper.verifyStackIsAssignable(CfFrameVerificationHelper.java:320)
at com.android.tools.r8.cf.code.CfFrameVerificationHelper.verifyIsAssignable(CfFrameVerificationHelper.java:264)
at com.android.tools.r8.cf.code.CfFrameVerificationHelper.verifyFrame(CfFrameVerificationHelper.java:213)
at com.android.tools.r8.cf.code.CfFrameVerificationHelper.verifyFrame(CfFrameVerificationHelper.java:209)
at com.android.tools.r8.cf.code.CfFrameVerificationHelper.verifyFrameAndSet(CfFrameVerificationHelper.java:169)
at com.android.tools.r8.cf.code.CfFrame.evaluate(CfFrame.java:454)
at com.android.tools.r8.graph.CfCode.verifyFrames(CfCode.java:782)
at com.android.tools.r8.graph.CfCode.verifyFramesOrRemove(CfCode.java:412)
at com.android.tools.r8.graph.CfCode.buildIR(CfCode.java:386)
at com.android.tools.r8.graph.LazyCfCode.buildIR(LazyCfCode.java:215)
at com.android.tools.r8.graph.ProgramMethod.buildIR(ProgramMethod.java:25)
at com.android.tools.r8.ir.conversion.IRConverter.rewriteCodeInternal(IRConverter.java:1122)
at com.android.tools.r8.ir.conversion.IRConverter.lambda$rewriteCode$13(IRConverter.java:1088)
at com.android.tools.r8.utils.ExceptionUtils.withOriginAndPositionAttachmentHandler(ExceptionUtils.java:220)
at com.android.tools.r8.ir.conversion.IRConverter.rewriteCode(IRConverter.java:1085)
at com.android.tools.r8.ir.conversion.IRConverter.convertMethod(IRConverter.java:535)
at com.android.tools.r8.ir.conversion.IRConverter.lambda$convertMethods$2(IRConverter.java:516)
at com.android.tools.r8.graph.DexProgramClass.lambda$forEachProgramMethodMatching$1(DexProgramClass.java:154)
at com.android.tools.r8.graph.MethodCollection.lambda$forEachMethodMatching$0(MethodCollection.java:96)
at com.android.tools.r8.graph.MethodCollectionBacking.lambda$forEachMethod$0(MethodCollectionBacking.java:51)
at com.android.tools.r8.graph.MethodArrayBacking.traverse(MethodArrayBacking.java:65)
at com.android.tools.r8.graph.MethodCollectionBacking.forEachMethod(MethodCollectionBacking.java:48)
at com.android.tools.r8.graph.MethodCollectionBacking.forEachMethod(MethodCollectionBacking.java:44)
at com.android.tools.r8.graph.MethodCollection.forEachMethodMatching(MethodCollection.java:93)
at com.android.tools.r8.graph.DexProgramClass.forEachProgramMethodMatching(DexProgramClass.java:153)
at com.android.tools.r8.ir.conversion.IRConverter.convertMethods(IRConverter.java:511)
at com.android.tools.r8.utils.ThreadUtils.lambda$processItems$4(ThreadUtils.java:59)
at com.android.tools.r8.utils.ThreadUtils.lambda$processItems$6(ThreadUtils.java:84)
at com.android.tools.r8.utils.ThreadUtils.lambda$processItemsWithResults$2(ThreadUtils.java:51)
at com.google.common.util.concurrent.TrustedListenableFutureTask$TrustedFutureInterruptibleTask.runInterruptibly(TrustedListenableFutureTask.java:125)
at com.google.common.util.concurrent.InterruptibleTask.run(InterruptibleTask.java:69)
at com.google.common.util.concurrent.TrustedListenableFutureTask.run(TrustedListenableFutureTask.java:78)
at com.google.common.util.concurrent.MoreExecutors$DirectExecutorService.execute(MoreExecutors.java:322)
at com.google.common.util.concurrent.AbstractListeningExecutorService.submit(AbstractListeningExecutorService.java:66)
at com.google.common.util.concurrent.AbstractListeningExecutorService.submit(AbstractListeningExecutorService.java:36)
at com.android.tools.r8.utils.ThreadUtils.lambda$processItemsWithResults$3(ThreadUtils.java:51)
at com.android.tools.r8.utils.ThreadUtils.processItemsWithResults(ThreadUtils.java:48)
at com.android.tools.r8.utils.ThreadUtils.processItems(ThreadUtils.java:81)
at com.android.tools.r8.utils.ThreadUtils.processItems(ThreadUtils.java:67)
at com.android.tools.r8.utils.ThreadUtils.processItems(ThreadUtils.java:59)
at com.android.tools.r8.ir.conversion.IRConverter.convert(IRConverter.java:476)
at com.android.tools.r8.D8.run(D8.java:209)
at com.android.tools.r8.D8.lambda$run$1(D8.java:119)
at com.android.tools.r8.utils.ExceptionUtils.withCompilationHandler(ExceptionUtils.java:70)
at com.android.tools.r8.utils.ExceptionUtils.withD8CompilationHandler(ExceptionUtils.java:54)
at com.android.tools.r8.D8.run(D8.java:116)
at com.android.builder.dexing.D8DexArchiveBuilder.convert(D8DexArchiveBuilder.java:116)
This is the exception:
st...@gmail.com <st...@gmail.com> #3
Sent over the class file via email, thanks!
ap...@google.com <ap...@google.com> #4
Thank you for the file - was able to reproduce it and have a fix ready. Will report back when the fix has been backported to 2.2
ap...@google.com <ap...@google.com> #5
Branch: master
commit e264cf81d23c15fa6295f979973b40b59ea2be81
Author: Morten Krogh-Jespersen <mkroghj@google.com>
Date: Fri Nov 20 19:03:26 2020
Add test for invalid bytecode expecting null in stackmap
Bug: 173598082
Change-Id: I0b322eab037f7e4f73175559d6880438232cb831
A src/test/java/com/android/tools/r8/cf/stackmap/SwitchStackFrameFallThroughTest.java
Description
I'm attaching a project which reproduces the issue: Click the "Make Requests" button, wait a few seconds, and the app should crash (if it didn't, try again; it's a bit random). The exception seems to be different every time (I've attached some of the exceptions I've seen).
The crash was observed on Android 5 and Android 9.
This does not happen in the following cases:
- if AGP 3.5.3 is used (the test project uses 4.0.0-alpha07)
- if debuggable is set to true
- if OkHttp 4.2.2 is used (4.3.0 has some multithreading improvements, which is what I suspect might be causing this issue)
- if minifyEnabled is set to false
Related OkHttp issue: