Martin JANDA created DERBY-6455:
-----------------------------------

             Summary: Infinite loop in 
NetworkServerControlImpl.ensureDataInBuffer
                 Key: DERBY-6455
                 URL: https://issues.apache.org/jira/browse/DERBY-6455
             Project: Derby
          Issue Type: Bug
          Components: Network Server
    Affects Versions: 10.10.1.1
            Reporter: Martin JANDA
            Priority: Critical


NetworkServerControlImpl.ensureDataInBuffer missing check for return -1 (EOF) 
from 'clientIs.read'. When read returns -1 thread consumes 100% CPU. Method 
NetworkServerControlImpl.fillReplyBuffer correctly throw exception.

Fix: add two lines:
    private void ensureDataInBuffer(int minimumBytesNeeded) throws Exception
    {
        // make sure the buffer is large enough
        while ((replyBufferCount - replyBufferPos) < minimumBytesNeeded)
        {
            try {
                int bytesRead = clientIs.read(replyBuffer, replyBufferCount, 
replyBuffer.length - replyBufferCount);
+                if (bytesRead == -1)
+                    consolePropertyMessage("DRDA_InvalidReplyTooShort.S", 
true);
                replyBufferCount += bytesRead;
        
            } catch (IOException e)
            {
                clientSocketError(e);
            }
        }
    }

StackTrace:
  java.lang.Thread.State: RUNNABLE
          at java.net.SocketInputStream.read(Unknown Source:-1)
          at 
org.apache.derby.impl.drda.NetworkServerControlImpl.ensureDataInBuffer(Unknown 
Source:-1)
          at 
org.apache.derby.impl.drda.NetworkServerControlImpl.readLDString(Unknown 
Source:-1)
          at 
org.apache.derby.impl.drda.NetworkServerControlImpl.readStringReply(Unknown 
Source:-1)
          at 
org.apache.derby.impl.drda.NetworkServerControlImpl.runtimeInfo(Unknown 
Source:-1)
          at org.apache.derby.drda.NetworkServerControl.getRuntimeInfo(Unknown 
Source:-1)
          at 
com.crcdata.dbadmin.server.DerbyEngine.getRuntimeInfo(DerbyEngine.java:134)
          at 
com.crcdata.dbadmin.server.DerbyEngine$DerbyServerMonitorTask.run(DerbyEngine.java:305)
          at java.util.concurrent.Executors$RunnableAdapter.call(Unknown 
Source:-1)
          at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source:-1)
          at java.util.concurrent.FutureTask.run(Unknown Source:-1)
          at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown 
Source:-1)
          at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown 
Source:-1)
          at java.lang.Thread.run(Unknown Source:-1)




--
This message was sent by Atlassian JIRA
(v6.1.5#6160)

Reply via email to