Konloch / Konloch/bytecode-viewer
Procyon Decompile Save error
- Dominant language
- Java
- Stars
- 15.6k
- Forks
- 1.3k
- PR merge metrics
- No merged PRs in 30d
Description
# Description
When viewing this file in the editor it works fine, however if you try to decompile any jar/zip with this file it will fail.
Only on Procyon.
# File
Default IOUtils.class From org.apache.commons.io
[IOUtils.zip](https://github.com/Konloch/bytecode-viewer/files/9066837/IOUtils.zip)
# Fix
I believe in
`the.bytecode.club.bytecodeviewer.decompilers.impl.ProcyonDecompiler.doSaveJarDecompiled`
The issue lies in `resolvedType` not directly being checked for a null, along with `type.resolve()`.
# Error
Please send this error log to https://github.com/Konloch/bytecode-viewer/issues or Konloch at https://the.bytecode.club or konloch@gmail.com
If you hold appropriate legal rights to the relevant class/jar/apk file please include that as well.
Bytecode Viewer Version: 2.11.2 [Fat Jar], OS: Windows 10, Java: 15.0.1
java.lang.NullPointerException: Cannot invoke "com.strobel.decompiler.languages.java.ast.DefiniteAssignmentAnalysis$DefiniteAssignmentNode.getNodeStatus()" because "node" is null
at com.strobel.decompiler.languages.java.ast.DefiniteAssignmentAnalysis.changeNodeStatus(DefiniteAssignmentAnalysis.java:276)
at com.strobel.decompiler.languages.java.ast.DefiniteAssignmentAnalysis.access$400(DefiniteAssignmentAnalysis.java:40)
at com.strobel.decompiler.languages.java.ast.DefiniteAssignmentAnalysis$DefiniteAssignmentVisitor.visitLambdaExpression(DefiniteAssignmentAnalysis.java:562)
at com.strobel.decompiler.languages.java.ast.DefiniteAssignmentAnalysis$DefiniteAssignmentVisitor.visitLambdaExpression(DefiniteAssignmentAnalysis.java:445)
at com.strobel.decompiler.languages.java.ast.LambdaExpression.acceptVisitor(LambdaExpression.java:49)
at com.strobel.decompiler.languages.java.ast.DefiniteAssignmentAnalysis$DefiniteAssignmentVisitor.visitChildren(DefiniteAssignmentAnalysis.java:465)
at com.strobel.decompiler.languages.java.ast.DefiniteAssignmentAnalysis$DefiniteAssignmentVisitor.visitChildren(DefiniteAssignmentAnalysis.java:445)
at com.strobel.decompiler.languages.java.ast.DepthFirstAstVisitor.visitObjectCreationExpression(DepthFirstAstVisitor.java:344)
at com.strobel.decompiler.languages.java.ast.ObjectCreationExpression.acceptVisitor(ObjectCreationExpression.java:98)
at com.strobel.decompiler.languages.java.ast.DefiniteAssignmentAnalysis$DefiniteAssignmentVisitor.visitVariableInitializer(DefiniteAssignmentAnalysis.java:498)
at com.strobel.decompiler.languages.java.ast.DefiniteAssignmentAnalysis$DefiniteAssignmentVisitor.visitVariableInitializer(DefiniteAssignmentAnalysis.java:445)
at com.strobel.decompiler.languages.java.ast.VariableInitializer.acceptVisitor(VariableInitializer.java:80)
at com.strobel.decompiler.languages.java.ast.DefiniteAssignmentAnalysis$DefiniteAssignmentVisitor.visitChildren(DefiniteAssignmentAnalysis.java:465)
at com.strobel.decompiler.languages.java.ast.DefiniteAssignmentAnalysis$DefiniteAssignmentVisitor.visitChildren(DefiniteAssignmentAnalysis.java:445)
at com.strobel.decompiler.languages.java.ast.DepthFirstAstVisitor.visitVariableDeclaration(DepthFirstAstVisitor.java:199)
at com.strobel.decompiler.languages.java.ast.VariableDeclarationStatement.acceptVisitor(VariableDeclarationStatement.java:115)
at com.strobel.decompiler.languages.java.ast.DefiniteAssignmentAnalysis$DefiniteAssignmentVisitor.visitTryCatchStatement(DefiniteAssignmentAnalysis.java:532)
at com.strobel.decompiler.languages.java.ast.DefiniteAssignmentAnalysis$DefiniteAssignmentVisitor.visitTryCatchStatement(DefiniteAssignmentAnalysis.java:445)
at com.strobel.decompiler.languages.java.ast.TryCatchStatement.acceptVisitor(TryCatchStatement.java:78)
at com.strobel.decompiler.languages.java.ast.DefiniteAssignmentAnalysis.changeNodeStatus(DefiniteAssignmentAnalysis.java:292)
at com.strobel.decompiler.languages.java.ast.DefiniteAssignmentAnalysis.analyze(DefiniteAssignmentAnalysis.java:194)
at com.strobel.decompiler.languages.java.ast.transforms.TryWithResourcesTransform.visitTryCatchStatement(TryWithResourcesTransform.java:290)
at com.strobel.decompiler.languages.java.ast.transforms.TryWithResourcesTransform.visitTryCatchStatement(TryWithResourcesTransform.java:34)
at com.strobel.decompiler.languages.java.ast.TryCatchStatement.acceptVisitor(TryCatchStatement.java:78)
at com.strobel.decompiler.languages.java.ast.DepthFirstAstVisitor.visitChildren(DepthFirstAstVisitor.java:41)
at com.strobel.decompiler.languages.java.ast.DepthFirstAstVisitor.visitBlockStatement(DepthFirstAstVisitor.java:104)
at com.strobel.decompiler.languages.java.ast.BlockStatement.acceptVisitor(BlockStatement.java:72)
at com.strobel.decompiler.languages.java.ast.DepthFirstAstVisitor.visitChildren(DepthFirstAstVisitor.java:41)
at com.strobel.decompiler.languages.java.ast.DepthFirstAstVisitor.visitMethodDeclaration(DepthFirstAstVisitor.java:234)
at com.strobel.decompiler.languages.java.ast.ContextTrackingVisitor.visitMethodDeclarationOverride(ContextTrackingVisitor.java:84)
at com.strobel.decompiler.languages.java.ast.ContextTrackingVisitor.visitMethodDeclaration(ContextTrackingVisitor.java:76)
at com.strobel.decompiler.languages.java.ast.ContextTrackingVisitor.visitMethodDeclaration(ContextTrackingVisitor.java:31)
at com.strobel.decompiler.languages.java.ast.MethodDeclaration.acceptVisitor(MethodDeclaration.java:94)
at com.strobel.decompiler.languages.java.ast.DepthFirstAstVisitor.visitChildren(DepthFirstAstVisitor.java:41)
at com.strobel.decompiler.languages.java.ast.DepthFirstAstVisitor.visitTypeDeclaration(DepthFirstAstVisitor.java:264)
at com.strobel.decompiler.languages.java.ast.ContextTrackingVisitor.visitTypeDeclarationOverride(ContextTrackingVisitor.java:69)
at com.strobel.decompiler.languages.java.ast.ContextTrackingVisitor.visitTypeDeclaration(ContextTrackingVisitor.java:60)
at com.strobel.decompiler.languages.java.ast.ContextTrackingVisitor.visitTypeDeclaration(ContextTrackingVisitor.java:31)
at com.strobel.decompiler.languages.java.ast.TypeDeclaration.acceptVisitor(TypeDeclaration.java:98)
at com.strobel.decompiler.languages.java.ast.DepthFirstAstVisitor.visitChildren(DepthFirstAstVisitor.java:41)
at com.strobel.decompiler.languages.java.ast.DepthFirstAstVisitor.visitCompilationUnit(DepthFirstAstVisitor.java:274)
at com.strobel.decompiler.languages.java.ast.CompilationUnit.acceptVisitor(CompilationUnit.java:82)
at com.strobel.decompiler.languages.java.ast.ContextTrackingVisitor.run(ContextTrackingVisitor.java:100)
at com.strobel.decompiler.languages.java.ast.transforms.TryWithResourcesTransform.run(TryWithResourcesTransform.java:169)
at com.strobel.decompiler.languages.java.ast.transforms.TransformationPipeline.runTransformationsUntil(TransformationPipeline.java:101)
at com.strobel.decompiler.languages.java.ast.AstBuilder.runTransformations(AstBuilder.java:122)
at com.strobel.decompiler.languages.java.JavaLanguage.runTransforms(JavaLanguage.java:97)
at com.strobel.decompiler.languages.java.JavaLanguage.buildAst(JavaLanguage.java:72)
at com.strobel.decompiler.languages.java.JavaLanguage.decompileType(JavaLanguage.java:59)
at the.bytecode.club.bytecodeviewer.decompilers.impl.ProcyonDecompiler.doSaveJarDecompiled(ProcyonDecompiler.java:187)
at the.bytecode.club.bytecodeviewer.decompilers.impl.ProcyonDecompiler.decompileToZip(ProcyonDecompiler.java:141)
at the.bytecode.club.bytecodeviewer.resources.ResourceDecompiling.decompileSaveAll(ResourceDecompiling.java:262)
at the.bytecode.club.bytecodeviewer.resources.ResourceDecompiling.lambda$decompileSaveAll$0(ResourceDecompiling.java:122)
at java.base/java.lang.Thread.run(Thread.java:832)
Contributor guide
Research direction
Start in ProcyonDecompiler.java at doSaveJarDecompiled, referenced by the stack trace at line 187, and reproduce the failure with the attached IOUtils.zip archive. Inspect the handling of resolvedType and type.resolve() described in the issue. Done means saving a Procyon-decompiled jar or zip without the reported NullPointerException.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java
- Domain
- reverse-engineering
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100