google/android-classyshark

ArrayIndexOutOfBoundsException when trying to export

joshterrill opened this issue · 7 comments

I've started ClassyShark using the command referenced in the README file, and in the left-hand tree, I'll click on a folder or file, then click the export button, and I get this error:

java.lang.ArrayIndexOutOfBoundsException: 6392800
	at org.ow2.asmdex.lowLevelUtils.DexFileReader.getStringItemFromStringIndex(DexFileReader.java:104)
	at org.ow2.asmdex.ApplicationReader.readAnnotationElement(ApplicationReader.java:1493)
	at org.ow2.asmdex.ApplicationReader.readEncodedAnnotation(ApplicationReader.java:1518)
	at org.ow2.asmdex.ApplicationReader.readEncodedValue(ApplicationReader.java:861)
	at org.ow2.asmdex.ApplicationReader.readAnnotationElement(ApplicationReader.java:1494)
	at org.ow2.asmdex.ApplicationReader.parseSpecificAnnotations(ApplicationReader.java:1473)
	at org.ow2.asmdex.ApplicationReader.readDefaultAnnotations(ApplicationReader.java:1271)
	at org.ow2.asmdex.ApplicationReader.visitClass(ApplicationReader.java:561)
	at org.ow2.asmdex.ApplicationReader.accept(ApplicationReader.java:437)
	at org.ow2.asmdex.ApplicationReader.accept(ApplicationReader.java:338)
	at com.google.classyshark.silverghost.translator.dex.DexMethodsDumper.fillAnalysis(DexMethodsDumper.java:106)
	at com.google.classyshark.silverghost.translator.dex.DexMethodsDumper.dumpMethods(DexMethodsDumper.java:84)
	at com.google.classyshark.silverghost.exporter.Exporter.writeMethods(Exporter.java:89)
	at com.google.classyshark.silverghost.exporter.Exporter.writeArchive(Exporter.java:47)
	at com.google.classyshark.gui.panel.ClassySharkPanel$3.doInBackground(ClassySharkPanel.java:207)
	at com.google.classyshark.gui.panel.ClassySharkPanel$3.doInBackground(ClassySharkPanel.java:202)
	at javax.swing.SwingWorker$1.call(SwingWorker.java:295)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at javax.swing.SwingWorker.run(SwingWorker.java:334)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)

Based on the stacktrace, it looks like the error is occurring somewhere around here:

It seems an issue with one of the ClassyShark dependencies, ASMDex, not sure something we can help with

@borisf did this work with a previous version of ASMDex? Is this just a specific edge case with the class that I'm looking at? I found this reference on their Gitlab which could be related: https://gitlab.ow2.org/asm/asm/-/issues/317957

I also saw in this issue: #204 that there was maybe a plan to remove the local ASMDex dependency and references all together? Is this still the plan? Is there a replacement that exists out there?

Did this work with a previous version of ASMDex? - I don't think we changed any asmdex dependencies.

Is this just a specific edge case with the class that I'm looking at? I found this reference on their Gitlab which could be related: https://gitlab.ow2.org/asm/asm/-/issues/317957 - I am not sure this is related, as the link shows ASM, which is class format library, while asmdex is a dex format library.

I also saw in this issue: #204 that there was maybe a plan to remove the local ASMDex dependency and references all together? Is this still the plan? Is there a replacement that exists out there? - unfortunately, I can't alocate much time to this project now, but pull requests are welcome.

@borisf I could look at submitting a PR. If ASMDex should be replaced, do you have a preference with what should replace it? If not, I can just do some testing and see what's out there and available. Unfortunately, it looks like the asmdex repo has not been contributed to in a while.

I think it is the best to remove the ASMDex all together. We have dexlib2 that parses classes.dex entries. AMSDex used in the following classes:

https://github.com/google/android-classyshark/blob/master/ClassySharkWS/src/com/google/classyshark/silverghost/translator/dex/DexMethodsDumper.java ==> dumps all methods to a file, can happily use other alternatives

https://github.com/google/android-classyshark/blob/master/ClassySharkWS/src/com/google/classyshark/silverghost/translator/apk/dashboard/ApkDashboard.java ==> calls ApkNativeMethodsVisitor.java, the next class

https://github.com/google/android-classyshark/blob/master/ClassySharkWS/src/com/google/classyshark/silverghost/translator/apk/dashboard/ApkNativeMethodsVisitor.java ==> for native methods stats (not sure we need them)

Awesome, thanks for your input @borisf. I'll fork the repo and look at it some time this week and then submit a PR if I can figure out a good fix.