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

markt-asf 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 d24b5a21c2 Reduce code duplication. Improve handling of error 
condition.
d24b5a21c2 is described below

commit d24b5a21c223347afb197bcf969bc3139acda4b7
Author: Mark Thomas <[email protected]>
AuthorDate: Wed Jun 24 20:47:29 2026 +0100

    Reduce code duplication. Improve handling of error condition.
---
 .../tomcat/websocket/LocalStrings.properties       |  1 +
 .../apache/tomcat/websocket/PerMessageDeflate.java | 38 +++++++++++-----------
 2 files changed, 20 insertions(+), 19 deletions(-)

diff --git a/java/org/apache/tomcat/websocket/LocalStrings.properties 
b/java/org/apache/tomcat/websocket/LocalStrings.properties
index 0d06c76d48..492e1bddfb 100644
--- a/java/org/apache/tomcat/websocket/LocalStrings.properties
+++ b/java/org/apache/tomcat/websocket/LocalStrings.properties
@@ -52,6 +52,7 @@ perMessageDeflate.deflateFailed=Failed to decompress a 
compressed WebSocket fram
 perMessageDeflate.duplicateParameter=Duplicate definition of the [{0}] 
extension parameter
 perMessageDeflate.invalidState=Invalid state
 perMessageDeflate.invalidWindowSize=An invalid windows of [{1}] size was 
specified for [{0}]. Valid values are whole numbers from 8 to 15 inclusive.
+perMessageDeflate.next.ise=The next transformation of type [{0}] returned 
unexpected result
 perMessageDeflate.unknownParameter=An unknown extension parameter [{0}] was 
defined
 
 util.invalidMessageHandler=The message handler provided does not have an 
onMessage(Object) method
diff --git a/java/org/apache/tomcat/websocket/PerMessageDeflate.java 
b/java/org/apache/tomcat/websocket/PerMessageDeflate.java
index 5ad156dcc8..c3627032c4 100644
--- a/java/org/apache/tomcat/websocket/PerMessageDeflate.java
+++ b/java/org/apache/tomcat/websocket/PerMessageDeflate.java
@@ -31,8 +31,8 @@ import jakarta.websocket.SendHandler;
 import org.apache.tomcat.util.res.StringManager;
 
 /**
- * Implementation of the permessage-deflate WebSocket extension as defined in 
RFC 7692.
- * This extension provides message compression for WebSocket frames.
+ * Implementation of the permessage-deflate WebSocket extension as defined in 
RFC 7692. This extension provides message
+ * compression for WebSocket frames.
  */
 public class PerMessageDeflate implements Transformation {
 
@@ -232,14 +232,7 @@ public class PerMessageDeflate implements Transformation {
 
         while (dest.hasRemaining()) {
             // Space available in destination. Try and fill it.
-            try {
-                written = inflater.inflate(dest.array(), dest.arrayOffset() + 
dest.position(), dest.remaining());
-            } catch (DataFormatException e) {
-                throw new 
IOException(sm.getString("perMessageDeflate.deflateFailed"), 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);
-            }
+            written = inflate(dest.array(), dest.arrayOffset() + 
dest.position(), dest.remaining());
             dest.position(dest.position() + written);
 
             if (inflater.needsInput() && !eomBytesInserted) {
@@ -268,6 +261,10 @@ public class PerMessageDeflate implements Transformation {
                     return endFrame(fin);
                 } else if (TransformationResult.UNDERFLOW.equals(nextResult)) {
                     return nextResult;
+                } else {
+                    // Should never happen unless next mis-behaves
+                    throw new IllegalStateException(
+                            sm.getString("perMessageDeflate.next.ise", 
next.getClass().getName()));
                 }
             } else if (written == 0) {
                 return endFrame(fin);
@@ -291,15 +288,7 @@ public class PerMessageDeflate implements Transformation {
             eomBytesInserted = true;
         }
 
-        int written;
-        try {
-            written = inflater.inflate(eomOverflowBuffer, 0, 
eomOverflowBuffer.length);
-        } catch (DataFormatException e) {
-            throw new 
IOException(sm.getString("perMessageDeflate.deflateFailed"), 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);
-        }
+        int written = inflate(eomOverflowBuffer, 0, eomOverflowBuffer.length);
 
         if (written > 0) {
             eomOverflowWritten = true;
@@ -310,6 +299,17 @@ public class PerMessageDeflate implements Transformation {
     }
 
 
+    private int inflate(byte[] dest, int start, int len) throws IOException {
+        try {
+            return inflater.inflate(dest, start, len);
+        } catch (DataFormatException e) {
+            throw new 
IOException(sm.getString("perMessageDeflate.deflateFailed"), 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);
+        }
+    }
+
     private TransformationResult endFrame(boolean fin) throws IOException {
         eomBytesInserted = false;
         eomOverflowWritten = false;


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

Reply via email to