[ 
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)

Reply via email to