diff --git a/bramble-core/src/test/java/org/briarproject/bramble/data/BdfReaderImplFuzzingTest.java b/bramble-core/src/test/java/org/briarproject/bramble/data/BdfReaderImplFuzzingTest.java new file mode 100644 index 0000000000000000000000000000000000000000..852e66853c91b2fb22aa7b8d3773be6f76ec02cf --- /dev/null +++ b/bramble-core/src/test/java/org/briarproject/bramble/data/BdfReaderImplFuzzingTest.java @@ -0,0 +1,41 @@ +package org.briarproject.bramble.data; + +import org.briarproject.bramble.test.BrambleTestCase; +import org.junit.Before; +import org.junit.Test; + +import java.io.ByteArrayInputStream; +import java.util.Random; + +import static org.briarproject.bramble.api.data.BdfReader.DEFAULT_MAX_BUFFER_SIZE; +import static org.briarproject.bramble.api.data.BdfReader.DEFAULT_NESTED_LIMIT; +import static org.briarproject.bramble.test.TestUtils.isOptionalTestEnabled; +import static org.junit.Assert.assertTrue; +import static org.junit.Assume.assumeTrue; + +public class BdfReaderImplFuzzingTest extends BrambleTestCase { + + @Before + public void setUp() { + assumeTrue(isOptionalTestEnabled(BdfReaderImplFuzzingTest.class)); + } + + @Test + public void testStringFuzzing() throws Exception { + Random random = new Random(); + byte[] buf = new byte[22]; + ByteArrayInputStream in = new ByteArrayInputStream(buf); + for (int i = 0; i < 100_000_000; i++) { + random.nextBytes(buf); + buf[0] = 0x41; // String with 1-byte length + buf[1] = 0x14; // Length 20 bytes + in.reset(); + BdfReaderImpl r = new BdfReaderImpl(in, DEFAULT_NESTED_LIMIT, + DEFAULT_MAX_BUFFER_SIZE); + int length = r.readString().length(); + assertTrue(length >= 0); + assertTrue(length <= 20); + assertTrue(r.eof()); + } + } +}