Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Invalid instruction can use better error messaging #8

Open
jitsedesmet opened this issue Jul 6, 2023 · 0 comments
Open

Invalid instruction can use better error messaging #8

jitsedesmet opened this issue Jul 6, 2023 · 0 comments

Comments

@jitsedesmet
Copy link
Contributor

When the Java ByteCode contains an instruction that is invalid, the error message totally misses the point.

For example:

import java.lang.String;
import java.lang.System;
import java.io.PrintStream;
version 12;
public class MyClass {
    public static void main(final String[] args) {
        getstatic System#PrintStream out
        apples
        ldc "Hello World!"
        invokevirtual PrintStream#void println(String)
        return
    }
}

Results in a stack trace

Exception in thread "main" java.io.IOException: An exception occured while assembling HelloWorld.jbc
        at com.guardsquare.proguard.assembler.io.JbcReader.read(JbcReader.java:78)
        at proguard.io.FilteredDataEntryReader.read(FilteredDataEntryReader.java:85)
        at proguard.io.FilteredDataEntryReader.read(FilteredDataEntryReader.java:85)
        at proguard.io.FilteredDataEntryReader.read(FilteredDataEntryReader.java:85)
        at proguard.io.FileSource.pumpDataEntries(FileSource.java:71)
        at com.guardsquare.proguard.assembler.AssemblerCli.readInput(AssemblerCli.java:156)
        at com.guardsquare.proguard.assembler.AssemblerCli.main(AssemblerCli.java:79)
Caused by: com.guardsquare.proguard.assembler.ParseException: Line 9: An exception occured while parsing main(java.lang.String[])
        at com.guardsquare.proguard.assembler.InstructionsParser.visitProgramMethod(InstructionsParser.java:94)
        at proguard.classfile.ProgramMethod.accept(ProgramMethod.java:140)
        at com.guardsquare.proguard.assembler.ClassMembersParser.visitProgramMethod(ClassMembersParser.java:182)
        at proguard.classfile.ProgramMethod.accept(ProgramMethod.java:140)
        at com.guardsquare.proguard.assembler.ClassMembersParser.visitProgramClass(ClassMembersParser.java:102)
        at proguard.classfile.ProgramClass.accept(ProgramClass.java:544)
        at com.guardsquare.proguard.assembler.ClassParser.visitProgramClass(ClassParser.java:170)
        at proguard.classfile.ProgramClass.accept(ProgramClass.java:544)
        at com.guardsquare.proguard.assembler.io.JbcReader.read(JbcReader.java:69)
        ... 6 more
Caused by: com.guardsquare.proguard.assembler.ParseException: Line 9: Expected label colon ':' but got word.
        at com.guardsquare.proguard.assembler.Parser.expect(Parser.java:117)
        at com.guardsquare.proguard.assembler.Parser.expect(Parser.java:202)
        at com.guardsquare.proguard.assembler.InstructionsParser.visitCodeAttribute(InstructionsParser.java:220)
        at proguard.classfile.attribute.CodeAttribute.accept(CodeAttribute.java:138)
        at com.guardsquare.proguard.assembler.InstructionsParser.visitProgramMethod(InstructionsParser.java:84)
        ... 14 more

As can be seen, the error points to line 9 even though this is unrelated. The example here is clear, apples is clearly not a valid instruction, but a typo in an instruction like astore_0 is easier to be made.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant