[
https://issues.apache.org/jira/browse/DERBY-6714?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Knut Anders Hatlen updated DERBY-6714:
--------------------------------------
Attachment: d6714-1a.diff
The attached patch [^d6714-1a.diff] fixes the three NPEs I have seen.
In Database.buildRuntimeInfo() there was no check for stmtTable being null, so
such checks were added.
In DRDAConnThread.buildRuntimeInfo() and Session.buildRuntimeInfo() such checks
were in place. However, they worked on fields that could be set to null by
another thread between the null check and the actual access of the field. These
holes were plugged by creating a local copy of the field, and perform both the
null check and the method call on the local copy.
> RuntimeInfoTest failed with insufficient data from server
> ---------------------------------------------------------
>
> Key: DERBY-6714
> URL: https://issues.apache.org/jira/browse/DERBY-6714
> Project: Derby
> Issue Type: Bug
> Components: Network Server
> Affects Versions: 10.12.0.0
> Reporter: Knut Anders Hatlen
> Assignee: Knut Anders Hatlen
> Attachments: d6714-1a.diff, derby.log
>
>
> Seen in the nightly testing of trunk.
> http://download.java.net/javadesktop/derby/request_5595117/javadb-task-3919785.html
> {noformat}
> java.lang.Exception: DRDA_InvalidReplyTooShort.S:Ungültige Antwort von
> Network Server: Daten nicht ausreichend.
> at
> org.apache.derby.impl.drda.NetworkServerControlImpl.consolePropertyMessageWork(NetworkServerControlImpl.java:3357)
> at
> org.apache.derby.impl.drda.NetworkServerControlImpl.consolePropertyMessage(NetworkServerControlImpl.java:1988)
> at
> org.apache.derby.impl.drda.NetworkServerControlImpl.fillReplyBuffer(NetworkServerControlImpl.java:2957)
> at
> org.apache.derby.impl.drda.NetworkServerControlImpl.readStringReply(NetworkServerControlImpl.java:3010)
> at
> org.apache.derby.impl.drda.NetworkServerControlImpl.runtimeInfo(NetworkServerControlImpl.java:1443)
> at
> org.apache.derby.drda.NetworkServerControl.getRuntimeInfo(NetworkServerControl.java:516)
> at
> org.apache.derbyTesting.functionTests.tests.derbynet.RuntimeInfoTest.x_testRuntimeInfoAfterConnClose(RuntimeInfoTest.java:193)
> at
> org.apache.derbyTesting.functionTests.tests.derbynet.RuntimeInfoTest.testRunTests(RuntimeInfoTest.java:97)
> at
> org.apache.derbyTesting.junit.BaseTestCase.runBare(BaseTestCase.java:119)
> at
> org.apache.derbyTesting.junit.BaseJDBCTestCase.runBareOverridable(BaseJDBCTestCase.java:440)
> at
> org.apache.derbyTesting.junit.BaseJDBCTestCase.runBare(BaseJDBCTestCase.java:457)
> at junit.extensions.TestDecorator.basicRun(TestDecorator.java:24)
> at junit.extensions.TestSetup$1.protect(TestSetup.java:21)
> at junit.extensions.TestSetup.run(TestSetup.java:25)
> at
> org.apache.derbyTesting.junit.BaseTestSetup.run(BaseTestSetup.java:58)
> at junit.extensions.TestDecorator.basicRun(TestDecorator.java:24)
> at junit.extensions.TestSetup$1.protect(TestSetup.java:21)
> at junit.extensions.TestSetup.run(TestSetup.java:25)
> at junit.extensions.TestDecorator.basicRun(TestDecorator.java:24)
> at junit.extensions.TestSetup$1.protect(TestSetup.java:21)
> at junit.extensions.TestSetup.run(TestSetup.java:25)
> at
> org.apache.derbyTesting.junit.BaseTestSetup.run(BaseTestSetup.java:58)
> at junit.extensions.TestDecorator.basicRun(TestDecorator.java:24)
> at junit.extensions.TestSetup$1.protect(TestSetup.java:21)
> at junit.extensions.TestSetup.run(TestSetup.java:25)
> at junit.extensions.TestDecorator.basicRun(TestDecorator.java:24)
> at junit.extensions.TestSetup$1.protect(TestSetup.java:21)
> at junit.extensions.TestSetup.run(TestSetup.java:25)
> at junit.extensions.TestDecorator.basicRun(TestDecorator.java:24)
> at junit.extensions.TestSetup$1.protect(TestSetup.java:21)
> at junit.extensions.TestSetup.run(TestSetup.java:25)
> {noformat}
> [^derby.log] showed that there was a NullPointerException while building the
> runtimeinfo string:
> {noformat}
> java.lang.NullPointerException
> at
> org.apache.derby.impl.drda.Database.buildRuntimeInfo(Database.java:417)
> at org.apache.derby.impl.drda.Session.buildRuntimeInfo(Session.java:291)
> at
> org.apache.derby.impl.drda.DRDAConnThread.buildRuntimeInfo(DRDAConnThread.java:9186)
> at
> org.apache.derby.impl.drda.NetworkServerControlImpl.buildRuntimeInfo(NetworkServerControlImpl.java:4069)
> at
> org.apache.derby.impl.drda.NetworkServerControlImpl.getRuntimeInfo(NetworkServerControlImpl.java:2229)
> at
> org.apache.derby.impl.drda.NetworkServerControlImpl.sendRuntimeInfo(NetworkServerControlImpl.java:2157)
> at
> org.apache.derby.impl.drda.NetworkServerControlImpl.processCommands(NetworkServerControlImpl.java:1804)
> at
> org.apache.derby.impl.drda.DRDAConnThread.sessionInitialState(DRDAConnThread.java:665)
> at
> org.apache.derby.impl.drda.DRDAConnThread.run(DRDAConnThread.java:284)
> {noformat}
--
This message was sent by Atlassian JIRA
(v6.2#6252)