You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "James Kukucka (Jira)" <ji...@apache.org> on 2021/09/03 15:55:00 UTC

[jira] [Created] (BCEL-358) IllegalArgumentException when loading abstract classes

James Kukucka created BCEL-358:
----------------------------------

             Summary: IllegalArgumentException when loading abstract classes
                 Key: BCEL-358
                 URL: https://issues.apache.org/jira/browse/BCEL-358
             Project: Commons BCEL
          Issue Type: Bug
          Components: Verifier
    Affects Versions: 6.5.0
         Environment: {code:java}
public class ParserTest {


    public void testWithInputStream(InputStream inputStream) throws IOException {
        JavaClass clazz;
        try {
            clazz = new ClassParser(inputStream, "Hello.class").parse();
        } catch (ClassFormatException e) {
            // ClassFormatException thrown by the parser is just invalid input
            Assume.assumeNoException(e);
            return;
        }

        // Any non-IOException thrown here should be marked a failure
        // (including ClassFormatException)
        verifyJavaClass(clazz);
    }



    private void verifyJavaClass( JavaClass javaClass) throws IOException {
        try {
            Repository.addClass(javaClass);
            Verifier verifier = StatelessVerifierFactory.getVerifier(javaClass.getClassName());
            VerificationResult result;
            result = verifier.doPass1();
            assumeThat(result.getMessage(), result.getStatus(), is(VerificationResult.VERIFIED_OK));
            result = verifier.doPass2();
            assumeThat(result.getMessage(), result.getStatus(), is(VerificationResult.VERIFIED_OK));
            for (int i = 0; i < javaClass.getMethods().length; i++) {
                result = verifier.doPass3a(i);
                assumeThat(result.getMessage(), result.getStatus(), is(VerificationResult.VERIFIED_OK));
            }
        } finally {
            Repository.clearCache();
        }
    }

    public static void main(String[] args) throws IOException {
        ParserTest pt = new ParserTest();
        FileInputStream fis = new FileInputStream(new File("/home/jamesk/bcel_bugs/illegalarg.input"));
        pt.testWithInputStream(fis);
    }

}
{code}
            Reporter: James Kukucka
         Attachments: illegalarg.input

Found during fuzzing research. IllegalArgumentException due to empty class name passed when loading interfaces.

 

Stack Trace:

{code:java}
Exception in thread "main" java.lang.IllegalArgumentException: Invalid class name 
	at org.apache.bcel.util.AbstractClassPathRepository.loadClass(AbstractClassPathRepository.java:67)
	at org.apache.bcel.util.MemorySensitiveClassPathRepository.loadClass(MemorySensitiveClassPathRepository.java:33)
	at org.apache.bcel.classfile.JavaClass.getInterfaces(JavaClass.java:847)
	at org.apache.bcel.verifier.statics.Pass3aVerifier$InstOperandConstraintVisitor.getMethodRecursive(Pass3aVerifier.java:1181)
	at org.apache.bcel.verifier.statics.Pass3aVerifier$InstOperandConstraintVisitor.visitINVOKESTATIC(Pass3aVerifier.java:1279)
	at org.apache.bcel.generic.INVOKESTATIC.accept(INVOKESTATIC.java:86)
	at org.apache.bcel.generic.InstructionHandle.accept(InstructionHandle.java:293)
	at org.apache.bcel.verifier.statics.Pass3aVerifier.pass3StaticInstructionOperandsChecks(Pass3aVerifier.java:443)
	at org.apache.bcel.verifier.statics.Pass3aVerifier.do_verify(Pass3aVerifier.java:208)
	at org.apache.bcel.verifier.PassVerifier.verify(PassVerifier.java:70)
	at org.apache.bcel.verifier.Verifier.doPass3a(Verifier.java:88)
{code}

 



--
This message was sent by Atlassian Jira
(v8.3.4#803005)