HttpParserFuzzer.java

package org.xnio.http;

import java.io.IOException;
import java.nio.ByteBuffer;

import com.code_intelligence.jazzer.api.FuzzedDataProvider;


public class HttpParserFuzzer {

    private FuzzedDataProvider fuzzedDataProvider;

    public HttpParserFuzzer(FuzzedDataProvider fuzzedDataProvider) throws Exception {
        this.fuzzedDataProvider = fuzzedDataProvider;
    }

    void test() {
        byte b[] = new byte[]{ 1 };
        int n = fuzzedDataProvider.remainingBytes();
        if(n != 0) {
            b = fuzzedDataProvider.consumeBytes(n);
        }
        HttpUpgradeParser parser = new HttpUpgradeParser();
        ByteBuffer buffer = ByteBuffer.wrap(b);
        
        try {
            /*
             * read everything, like HttpParserTestCase.testOneCharacterAtATime does,
             * but read junk after that, too
             */
            for(int i=0; i!=n; ++i) {
                buffer.limit(i);
                parser.parse(buffer);
            }
        } catch (IOException exception) {
            /* ignore */
        } catch (IllegalArgumentException excepion) {
            /* ignore */
        }
    }

    public static void fuzzerTestOneInput(FuzzedDataProvider fuzzedDataProvider)  throws Exception {

        HttpParserFuzzer fixture = new HttpParserFuzzer(fuzzedDataProvider);
        fixture.test();
    }
}