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

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


The following commit(s) were added to refs/heads/11.0.x by this push:
     new fd28be54d8 Fix BZ 69845 - Inflater/Deflater throw ISE rather than NPE 
from Java 25
fd28be54d8 is described below

commit fd28be54d8004eaff3c8cd6c48dbba3bc51ec290
Author: Mark Thomas <[email protected]>
AuthorDate: Wed Oct 8 16:36:10 2025 +0100

    Fix BZ 69845 - Inflater/Deflater throw ISE rather than NPE from Java 25
---
 java/org/apache/tomcat/websocket/PerMessageDeflate.java |  6 ++++--
 webapps/docs/changelog.xml                              | 11 +++++++++++
 2 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/java/org/apache/tomcat/websocket/PerMessageDeflate.java 
b/java/org/apache/tomcat/websocket/PerMessageDeflate.java
index 803842b0c6..b541f29e1b 100644
--- a/java/org/apache/tomcat/websocket/PerMessageDeflate.java
+++ b/java/org/apache/tomcat/websocket/PerMessageDeflate.java
@@ -201,7 +201,8 @@ public class PerMessageDeflate implements Transformation {
                 written = inflater.inflate(dest.array(), dest.arrayOffset() + 
dest.position(), dest.remaining());
             } catch (DataFormatException e) {
                 throw new 
IOException(sm.getString("perMessageDeflate.deflateFailed"), e);
-            } catch (NullPointerException e) {
+            } catch (IllegalStateException | NullPointerException e) {
+                // As of Java 25, the JRE throws an ISE rather than an NPE
                 throw new 
IOException(sm.getString("perMessageDeflate.alreadyClosed"), e);
             }
             dest.position(dest.position() + written);
@@ -361,7 +362,8 @@ public class PerMessageDeflate implements Transformation {
                                 compressedPayload.arrayOffset() + 
compressedPayload.position(),
                                 compressedPayload.remaining(), flush);
                         
compressedPayload.position(compressedPayload.position() + written);
-                    } catch (NullPointerException e) {
+                    } catch (IllegalStateException | NullPointerException e) {
+                        // As of Java 25, the JRE throws an ISE rather than an 
NPE
                         throw new 
IOException(sm.getString("perMessageDeflate.alreadyClosed"), e);
                     }
 
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index 86261a896b..00e3947057 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -132,6 +132,17 @@
       </fix>
     </changelog>
   </subsection>
+  <subsection name="WebSocket">
+    <changelog>
+      <fix>
+        <bug>69845</bug>: When using <code>permessage-deflate</code> with Java
+        25 onwards, handle the underlying <code>Inflater</code> and/or
+        <code>Deflater</code> throwing <code>IllegalStateException</code>
+        when closed rather than <code>NullPointerException</code> as they do in
+        Java 24 and earlier. (markt)
+      </fix>
+    </changelog>
+  </subsection>
   <subsection name="Other">
     <changelog>
       <fix>


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to