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

remm pushed a commit to branch 9.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/9.0.x by this push:
     new 278b50a  Add low effort null check in facade
278b50a is described below

commit 278b50ae985ce87a3c8da51de054e6db56dd4ced
Author: remm <r...@apache.org>
AuthorDate: Wed Jan 5 13:23:04 2022 +0100

    Add low effort null check in facade
    
    isReady is a likely target for uncontrolled async access, so add a check
    for null there to throw a more informative ISE if possible, like is done
    in Request/ResponseFacade for the most common calls.
    As seen in BZ65780 (when faced with a NPE, users always assume it is a
    Tomcat bug)
---
 java/org/apache/catalina/connector/CoyoteInputStream.java  | 3 +++
 java/org/apache/catalina/connector/CoyoteOutputStream.java | 3 +++
 java/org/apache/catalina/connector/LocalStrings.properties | 2 ++
 webapps/docs/changelog.xml                                 | 4 ++++
 4 files changed, 12 insertions(+)

diff --git a/java/org/apache/catalina/connector/CoyoteInputStream.java 
b/java/org/apache/catalina/connector/CoyoteInputStream.java
index c7ee2e9..e1f14f5 100644
--- a/java/org/apache/catalina/connector/CoyoteInputStream.java
+++ b/java/org/apache/catalina/connector/CoyoteInputStream.java
@@ -198,6 +198,9 @@ public class CoyoteInputStream extends ServletInputStream {
 
     @Override
     public boolean isReady() {
+        if (ib == null) {
+            throw new 
IllegalStateException(sm.getString("coyoteInputStream.null"));
+        }
         return ib.isReady();
     }
 
diff --git a/java/org/apache/catalina/connector/CoyoteOutputStream.java 
b/java/org/apache/catalina/connector/CoyoteOutputStream.java
index cf27525..3c470dc 100644
--- a/java/org/apache/catalina/connector/CoyoteOutputStream.java
+++ b/java/org/apache/catalina/connector/CoyoteOutputStream.java
@@ -159,6 +159,9 @@ public class CoyoteOutputStream extends ServletOutputStream 
{
 
     @Override
     public boolean isReady() {
+        if (ob == null) {
+            throw new 
IllegalStateException(sm.getString("coyoteOutputStream.null"));
+        }
         return ob.isReady();
     }
 
diff --git a/java/org/apache/catalina/connector/LocalStrings.properties 
b/java/org/apache/catalina/connector/LocalStrings.properties
index 98ec857..c76e757 100644
--- a/java/org/apache/catalina/connector/LocalStrings.properties
+++ b/java/org/apache/catalina/connector/LocalStrings.properties
@@ -37,8 +37,10 @@ coyoteConnector.protocolHandlerStartFailed=Protocol handler 
start failed
 coyoteConnector.protocolHandlerStopFailed=Protocol handler stop failed
 
 coyoteInputStream.nbNotready=In non-blocking mode you may not read from the 
ServletInputStream until the previous read has completed and isReady() returns 
true
+coyoteInputStream.null=The input buffer object has been recycled and is no 
longer associated with this facade
 
 coyoteOutputStream.nbNotready=In non-blocking mode you may not write to the 
ServletOutputStream until the previous write has completed and isReady() 
returns true
+coyoteOutputStream.null=The output buffer object has been recycled and is no 
longer associated with this facade
 
 coyoteRequest.alreadyAuthenticated=This request has already been authenticated
 coyoteRequest.attributeEvent=Exception thrown by attributes event listener
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index f64b3b6..d16831d 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -111,6 +111,10 @@
         Add additional locking to <code>DataSourceUserDatabase</code> to 
provide
         improved protection for concurrent modifications. (markt)
       </fix>
+      <fix>
+        Add recycling check in the input and output stream isReady to try to
+        give a more informative ISE when the facade has been recycled. (remm)
+      </fix>
     </changelog>
   </subsection>
   <subsection name="Coyote">

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

Reply via email to