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]