[ https://issues.apache.org/jira/browse/SUREFIRE-2056?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Tibor Digana updated SUREFIRE-2056: ----------------------------------- Fix Version/s: 3.0.0-M7 > BufferOverflowException when encoding message with null testId > -------------------------------------------------------------- > > Key: SUREFIRE-2056 > URL: https://issues.apache.org/jira/browse/SUREFIRE-2056 > Project: Maven Surefire > Issue Type: Bug > Components: Maven Surefire Plugin > Affects Versions: 3.0.0-M6 > Reporter: Yoann Rodière > Priority: Major > Fix For: 3.0.0-M7 > > > The problem seems to have been introduced here: > https://github.com/apache/maven-surefire/commit/79db90338fb474f91c76991388a35bc412ee1d46#diff-a901d2e995f3d9e7ca75988975cefff9bb5f88686c3d0c8fc8696bc749253e8cR396 > {code} > int bufferMaxLength = estimateBufferLength( > eventType.getOpcode().length(), runMode, encoder, 0, > testRunId == null ? 0 : 1, message ); > {code} > The buffer estimate seems to ignore the testRunId field completely when the > testRunId is null, but the {{encodeHeader}} method still adds content to the > buffer even when the testRunId is null, resulting in a buffer overflow: > https://github.com/apache/maven-surefire/commit/79db90338fb474f91c76991388a35bc412ee1d46#diff-2c1d8cdb8be334b20d2b1befed41ac6776b024a3a8ae040e2413569ead512a21R92-R97 > {code} > result.put( (byte) ( testRunId == null ? 0 : 1 ) ); > if ( testRunId != null ) > { > result.putLong( testRunId ); > } > result.put( (byte) ':' ); > {code} > Sending a PR shortly. > Stack trace: > {noformat} > java.lang.IllegalStateException: Failed to load ApplicationContext > at > org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:132) > at > org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:124) > at > org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:118) > at > org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83) > at > org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener.prepareTestInstance(SpringBootDependencyInjectionTestExecutionListener.java:43) > at > org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:248) > at > org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:227) > at > org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:289) > at > org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) > at > org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291) > at > org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:246) > at > org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) > at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331) > at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79) > at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329) > at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66) > at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293) > at > org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) > at > org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) > at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306) > at org.junit.runners.ParentRunner.run(ParentRunner.java:413) > at > org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190) > at org.junit.runners.Suite.runChild(Suite.java:128) > at org.junit.runners.Suite.runChild(Suite.java:27) > at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331) > at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79) > at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329) > at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66) > at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293) > at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306) > at org.junit.runners.ParentRunner.run(ParentRunner.java:413) > at org.apache.maven.surefire.junitcore.JUnitCore.run(JUnitCore.java:55) > at > org.apache.maven.surefire.junitcore.JUnitCoreWrapper.createRequestAndRun(JUnitCoreWrapper.java:137) > at > org.apache.maven.surefire.junitcore.JUnitCoreWrapper.executeEager(JUnitCoreWrapper.java:107) > at > org.apache.maven.surefire.junitcore.JUnitCoreWrapper.execute(JUnitCoreWrapper.java:83) > at > org.apache.maven.surefire.junitcore.JUnitCoreWrapper.execute(JUnitCoreWrapper.java:75) > at > org.apache.maven.surefire.junitcore.JUnitCoreProvider.invoke(JUnitCoreProvider.java:158) > at > org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:456) > at > org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:169) > at > org.apache.maven.surefire.booter.ForkedBooter.run(ForkedBooter.java:595) > at > org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:581) > Caused by: java.nio.BufferOverflowException > at java.base/java.nio.Buffer.nextPutIndex(Buffer.java:722) > at java.base/java.nio.HeapByteBuffer.put(HeapByteBuffer.java:209) > at > org.apache.maven.surefire.api.stream.AbstractStreamEncoder.encodeString(AbstractStreamEncoder.java:127) > at > org.apache.maven.surefire.api.stream.AbstractStreamEncoder.encodeStringData(AbstractStreamEncoder.java:171) > at > org.apache.maven.surefire.api.stream.AbstractStreamEncoder.encode(AbstractStreamEncoder.java:157) > at > org.apache.maven.surefire.booter.spi.EventChannelEncoder.encodeMessage(EventChannelEncoder.java:398) > at > org.apache.maven.surefire.booter.spi.EventChannelEncoder.setOutErr(EventChannelEncoder.java:188) > at > org.apache.maven.surefire.booter.spi.EventChannelEncoder.testOutput(EventChannelEncoder.java:183) > at > org.apache.maven.surefire.api.booter.ForkingRunListener.writeTestOutput(ForkingRunListener.java:113) > at > org.apache.maven.surefire.api.booter.ForkingRunListener.writeTestOutput(ForkingRunListener.java:44) > at > org.apache.maven.surefire.common.junit4.JUnit4RunListener.writeTestOutput(JUnit4RunListener.java:235) > at > org.apache.maven.surefire.api.report.ConsoleOutputCapture$ForwardingPrintStream.println(ConsoleOutputCapture.java:138) > at > org.springframework.boot.SpringBootBanner.printBanner(SpringBootBanner.java:45) > at > org.springframework.boot.SpringApplicationBannerPrinter.print(SpringApplicationBannerPrinter.java:72) > at > org.springframework.boot.SpringApplication.printBanner(SpringApplication.java:561) > at > org.springframework.boot.SpringApplication.run(SpringApplication.java:298) > at > org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:121) > at > org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:99) > at > org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) > ... 40 more > {noformat} -- This message was sent by Atlassian Jira (v8.20.1#820001)