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

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


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

commit df62a7768ec5b76f7abda9895286481db917c21d
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 8101bd769e..dc76d9c7fa 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -118,6 +118,17 @@
       </update>
     </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>
 </section>
 <section name="Tomcat 10.1.47 (schultz)" rtext="2025-09-07">
   <subsection name="Catalina">


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

Reply via email to