This is an automated email from the ASF dual-hosted git repository.

markt pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/master by this push:
     new 7046644  Follow-up to c2d6278. NPE->ClosedChannelException for closed 
socket
7046644 is described below

commit 7046644bf361b89afc246b6643e24ce2ae60cacc
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Wed May 29 14:10:29 2019 +0100

    Follow-up to c2d6278. NPE->ClosedChannelException for closed socket
    
    If an attempt is made to use a closed socket, throw a
    ClosedChannelException rather than a NullPointerException
---
 java/org/apache/tomcat/util/net/NioEndpoint.java | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/java/org/apache/tomcat/util/net/NioEndpoint.java 
b/java/org/apache/tomcat/util/net/NioEndpoint.java
index 62dbab2..765935e 100644
--- a/java/org/apache/tomcat/util/net/NioEndpoint.java
+++ b/java/org/apache/tomcat/util/net/NioEndpoint.java
@@ -27,6 +27,7 @@ import java.net.SocketTimeoutException;
 import java.nio.ByteBuffer;
 import java.nio.channels.CancelledKeyException;
 import java.nio.channels.Channel;
+import java.nio.channels.ClosedChannelException;
 import java.nio.channels.CompletionHandler;
 import java.nio.channels.FileChannel;
 import java.nio.channels.NetworkChannel;
@@ -52,6 +53,7 @@ import org.apache.tomcat.util.IntrospectionUtils;
 import org.apache.tomcat.util.collections.SynchronizedQueue;
 import org.apache.tomcat.util.collections.SynchronizedStack;
 import org.apache.tomcat.util.net.AbstractEndpoint.Handler.SocketState;
+import org.apache.tomcat.util.net.NioChannel.ClosedNioChannel;
 import org.apache.tomcat.util.net.jsse.JSSESupport;
 
 /**
@@ -1240,6 +1242,10 @@ public class NioEndpoint extends 
AbstractJsseEndpoint<NioChannel,SocketChannel>
 
         @Override
         protected void doWrite(boolean block, ByteBuffer from) throws 
IOException {
+            NioChannel socket = getSocket();
+            if (socket instanceof ClosedNioChannel) {
+                throw new ClosedChannelException();
+            }
             if (block) {
                 long writeTimeout = getWriteTimeout();
                 Selector selector = null;
@@ -1249,11 +1255,11 @@ public class NioEndpoint extends 
AbstractJsseEndpoint<NioChannel,SocketChannel>
                     // Ignore
                 }
                 try {
-                    pool.write(from, getSocket(), selector, writeTimeout);
+                    pool.write(from, socket, selector, writeTimeout);
                     if (block) {
                         // Make sure we are flushed
                         do {
-                            if (getSocket().flush(true, selector, 
writeTimeout)) {
+                            if (socket.flush(true, selector, writeTimeout)) {
                                 break;
                             }
                         } while (true);
@@ -1268,7 +1274,7 @@ public class NioEndpoint extends 
AbstractJsseEndpoint<NioChannel,SocketChannel>
                 // registered for write once as both container and user code 
can trigger
                 // write registration.
             } else {
-                if (getSocket().write(from) == -1) {
+                if (socket.write(from) == -1) {
                     throw new EOFException();
                 }
             }


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to