LoggerFuzzer.java

package ossfuzz;

import com.code_intelligence.jazzer.api.FuzzedDataProvider;

import org.apache.log4j.*;

public class LoggerFuzzer {
	protected String m_fqcn;
	protected Level m_level;
	protected String m_diagnostic;
	protected Exception m_throwable;
	protected String m_key;
	protected Object[] m_params;

	LoggerFuzzer(FuzzedDataProvider fuzzedDataProvider) {
		int n = fuzzedDataProvider.consumeInt(0, 10);
		m_params = new Object[n];
		for(int i=0; i<n; ++i) {
			switch(fuzzedDataProvider.consumeInt(0,3)) {
				case 0:
					m_params[i] = new Integer(fuzzedDataProvider.consumeInt());
					break;
				case 1:
					m_params[i] = new Double(fuzzedDataProvider.consumeDouble());
					break;
				case 2:
					m_params[i] = new String(fuzzedDataProvider.consumeString(16));
					break;
			}
		}

		m_fqcn = fuzzedDataProvider.consumeString(16);
		m_key  = fuzzedDataProvider.consumeString(16);
		m_level = Level.toLevel(fuzzedDataProvider.consumeInt());
		m_diagnostic = fuzzedDataProvider.consumeRemainingAsString();
		m_throwable = new NullPointerException();
	}

	void test() {
		Logger logger = Logger.getLogger(LoggerFuzzer.class);

		logger.addAppender(new MyAppender());
		
		/*
		 * the popular ones
		 */
		logger.debug(m_diagnostic);
		logger.error(m_diagnostic);
		logger.fatal(m_diagnostic);
		logger.info(m_diagnostic);
		logger.trace(m_diagnostic);

		/*
         * not so popular
		 */
		 logger.log(m_level, m_diagnostic);
		 logger.log(m_fqcn, m_level, m_diagnostic, m_throwable);
		 logger.l7dlog(m_level, m_key, m_throwable);
		 logger.l7dlog(m_level, m_key, m_params, m_throwable);
	}

	public static void fuzzerTestOneInput(FuzzedDataProvider fuzzedDataProvider) {
		LoggerFuzzer testClosure = new LoggerFuzzer(fuzzedDataProvider);
		testClosure.test();
		
		
	}
}