File 0004-Disable-Brotli-and-ZStd-compression.patch of Package netty
From 96dec85327b3309c7fcc0d77376ef12415bffa34 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fridrich=20=C5=A0trba?= <fridrich.strba@bluewin.ch>
Date: Thu, 30 Mar 2023 13:19:04 +0200
Subject: [PATCH 4/4] Disable Brotli and ZStd compression
---
.../codec/http/HttpContentCompressor.java | 76 +------------------
.../codec/http/HttpContentDecompressor.java | 16 ----
.../CompressorHttp2ConnectionEncoder.java | 31 +-------
.../DelegatingDecompressorFrameListener.java | 14 ----
.../StandardCompressionOptions.java | 63 +--------------
5 files changed, 5 insertions(+), 195 deletions(-)
diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/HttpContentCompressor.java b/codec-http/src/main/java/io/netty/handler/codec/http/HttpContentCompressor.java
index 17f55d3ed5..9bfe5f4cce 100644
--- a/codec-http/src/main/java/io/netty/handler/codec/http/HttpContentCompressor.java
+++ b/codec-http/src/main/java/io/netty/handler/codec/http/HttpContentCompressor.java
@@ -24,9 +24,6 @@ import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.embedded.EmbeddedChannel;
import io.netty.handler.codec.MessageToByteEncoder;
-import io.netty.handler.codec.compression.Brotli;
-import io.netty.handler.codec.compression.BrotliEncoder;
-import io.netty.handler.codec.compression.BrotliOptions;
import io.netty.handler.codec.compression.CompressionOptions;
import io.netty.handler.codec.compression.DeflateOptions;
import io.netty.handler.codec.compression.GzipOptions;
@@ -34,9 +31,6 @@ import io.netty.handler.codec.compression.StandardCompressionOptions;
import io.netty.handler.codec.compression.ZlibCodecFactory;
import io.netty.handler.codec.compression.ZlibEncoder;
import io.netty.handler.codec.compression.ZlibWrapper;
-import io.netty.handler.codec.compression.Zstd;
-import io.netty.handler.codec.compression.ZstdEncoder;
-import io.netty.handler.codec.compression.ZstdOptions;
import io.netty.handler.codec.compression.SnappyFrameEncoder;
import io.netty.handler.codec.compression.SnappyOptions;
import io.netty.util.internal.ObjectUtil;
@@ -52,10 +46,8 @@ import static io.netty.util.internal.ObjectUtil.checkInRange;
*/
public class HttpContentCompressor extends HttpContentEncoder {
- private final BrotliOptions brotliOptions;
private final GzipOptions gzipOptions;
private final DeflateOptions deflateOptions;
- private final ZstdOptions zstdOptions;
private final SnappyOptions snappyOptions;
private final int contentSizeThreshold;
@@ -174,10 +166,8 @@ public class HttpContentCompressor extends HttpContentEncoder {
*/
public HttpContentCompressor(int contentSizeThreshold, CompressionOptions... compressionOptions) {
this.contentSizeThreshold = ObjectUtil.checkPositiveOrZero(contentSizeThreshold, "contentSizeThreshold");
- BrotliOptions brotliOptions = null;
GzipOptions gzipOptions = null;
DeflateOptions deflateOptions = null;
- ZstdOptions zstdOptions = null;
SnappyOptions snappyOptions = null;
if (compressionOptions == null || compressionOptions.length == 0) {
compressionOptions = defaultCompressionOptions(
@@ -192,14 +182,10 @@ public class HttpContentCompressor extends HttpContentEncoder {
// This results in the static analysis of native-image identifying the instanceof BrotliOptions check
// and thus BrotliOptions itself as unreachable, enabling native-image to link all classes
// at build time and not complain about the missing Brotli classes.
- if (Brotli.isAvailable() && compressionOption instanceof BrotliOptions) {
- brotliOptions = (BrotliOptions) compressionOption;
- } else if (compressionOption instanceof GzipOptions) {
+ if (compressionOption instanceof GzipOptions) {
gzipOptions = (GzipOptions) compressionOption;
} else if (compressionOption instanceof DeflateOptions) {
deflateOptions = (DeflateOptions) compressionOption;
- } else if (Zstd.isAvailable() && compressionOption instanceof ZstdOptions) {
- zstdOptions = (ZstdOptions) compressionOption;
} else if (compressionOption instanceof SnappyOptions) {
snappyOptions = (SnappyOptions) compressionOption;
} else {
@@ -210,8 +196,6 @@ public class HttpContentCompressor extends HttpContentEncoder {
this.gzipOptions = gzipOptions;
this.deflateOptions = deflateOptions;
- this.brotliOptions = brotliOptions;
- this.zstdOptions = zstdOptions;
this.snappyOptions = snappyOptions;
this.factories = new HashMap<String, CompressionEncoderFactory>();
@@ -222,12 +206,6 @@ public class HttpContentCompressor extends HttpContentEncoder {
if (this.deflateOptions != null) {
this.factories.put("deflate", new DeflateEncoderFactory());
}
- if (Brotli.isAvailable() && this.brotliOptions != null) {
- this.factories.put("br", new BrEncoderFactory());
- }
- if (this.zstdOptions != null) {
- this.factories.put("zstd", new ZstdEncoderFactory());
- }
if (this.snappyOptions != null) {
this.factories.put("snappy", new SnappyEncoderFactory());
}
@@ -239,13 +217,6 @@ public class HttpContentCompressor extends HttpContentEncoder {
options.add(gzipOptions);
options.add(deflateOptions);
options.add(StandardCompressionOptions.snappy());
-
- if (Brotli.isAvailable()) {
- options.add(StandardCompressionOptions.brotli());
- }
- if (Zstd.isAvailable()) {
- options.add(StandardCompressionOptions.zstd());
- }
return options.toArray(new CompressionOptions[0]);
}
@@ -289,8 +260,6 @@ public class HttpContentCompressor extends HttpContentEncoder {
@SuppressWarnings("FloatingPointEquality")
protected String determineEncoding(String acceptEncoding) {
float starQ = -1.0f;
- float brQ = -1.0f;
- float zstdQ = -1.0f;
float snappyQ = -1.0f;
float gzipQ = -1.0f;
float deflateQ = -1.0f;
@@ -307,10 +276,6 @@ public class HttpContentCompressor extends HttpContentEncoder {
}
if (encoding.contains("*")) {
starQ = q;
- } else if (encoding.contains("br") && q > brQ) {
- brQ = q;
- } else if (encoding.contains("zstd") && q > zstdQ) {
- zstdQ = q;
} else if (encoding.contains("snappy") && q > snappyQ) {
snappyQ = q;
} else if (encoding.contains("gzip") && q > gzipQ) {
@@ -319,12 +284,8 @@ public class HttpContentCompressor extends HttpContentEncoder {
deflateQ = q;
}
}
- if (brQ > 0.0f || zstdQ > 0.0f || snappyQ > 0.0f || gzipQ > 0.0f || deflateQ > 0.0f) {
- if (brQ != -1.0f && brQ >= zstdQ && this.brotliOptions != null) {
- return "br";
- } else if (zstdQ != -1.0f && zstdQ >= snappyQ && this.zstdOptions != null) {
- return "zstd";
- } else if (snappyQ != -1.0f && snappyQ >= gzipQ && this.snappyOptions != null) {
+ if (snappyQ > 0.0f || gzipQ > 0.0f || deflateQ > 0.0f) {
+ if (snappyQ != -1.0f && snappyQ >= gzipQ && this.snappyOptions != null) {
return "snappy";
} else if (gzipQ != -1.0f && gzipQ >= deflateQ && this.gzipOptions != null) {
return "gzip";
@@ -333,12 +294,6 @@ public class HttpContentCompressor extends HttpContentEncoder {
}
}
if (starQ > 0.0f) {
- if (brQ == -1.0f && this.brotliOptions != null) {
- return "br";
- }
- if (zstdQ == -1.0f && this.zstdOptions != null) {
- return "zstd";
- }
if (snappyQ == -1.0f && this.snappyOptions != null) {
return "snappy";
}
@@ -423,31 +378,6 @@ public class HttpContentCompressor extends HttpContentEncoder {
}
}
- /**
- * Compression Encoder Factory that creates {@link BrotliEncoder}s
- * used to compress http content for br content encoding
- */
- private final class BrEncoderFactory implements CompressionEncoderFactory {
-
- @Override
- public MessageToByteEncoder<ByteBuf> createEncoder() {
- return new BrotliEncoder(brotliOptions.parameters());
- }
- }
-
- /**
- * Compression Encoder Factory for create {@link ZstdEncoder}
- * used to compress http content for zstd content encoding
- */
- private final class ZstdEncoderFactory implements CompressionEncoderFactory {
-
- @Override
- public MessageToByteEncoder<ByteBuf> createEncoder() {
- return new ZstdEncoder(zstdOptions.compressionLevel(),
- zstdOptions.blockSize(), zstdOptions.maxEncodeSize());
- }
- }
-
/**
* Compression Encoder Factory for create {@link SnappyFrameEncoder}
* used to compress http content for snappy content encoding
diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/HttpContentDecompressor.java b/codec-http/src/main/java/io/netty/handler/codec/http/HttpContentDecompressor.java
index 44e6195332..475a09ae58 100644
--- a/codec-http/src/main/java/io/netty/handler/codec/http/HttpContentDecompressor.java
+++ b/codec-http/src/main/java/io/netty/handler/codec/http/HttpContentDecompressor.java
@@ -15,23 +15,17 @@
*/
package io.netty.handler.codec.http;
-import static io.netty.handler.codec.http.HttpHeaderValues.BR;
import static io.netty.handler.codec.http.HttpHeaderValues.DEFLATE;
import static io.netty.handler.codec.http.HttpHeaderValues.GZIP;
import static io.netty.handler.codec.http.HttpHeaderValues.X_DEFLATE;
import static io.netty.handler.codec.http.HttpHeaderValues.X_GZIP;
import static io.netty.handler.codec.http.HttpHeaderValues.SNAPPY;
-import static io.netty.handler.codec.http.HttpHeaderValues.ZSTD;
import static io.netty.util.internal.ObjectUtil.checkPositiveOrZero;
import io.netty.channel.embedded.EmbeddedChannel;
-import io.netty.handler.codec.compression.Brotli;
-import io.netty.handler.codec.compression.BrotliDecoder;
import io.netty.handler.codec.compression.SnappyFrameDecoder;
import io.netty.handler.codec.compression.ZlibCodecFactory;
import io.netty.handler.codec.compression.ZlibWrapper;
-import io.netty.handler.codec.compression.Zstd;
-import io.netty.handler.codec.compression.ZstdDecoder;
/**
* Decompresses an {@link HttpMessage} and an {@link HttpContent} compressed in
@@ -102,21 +96,11 @@ public class HttpContentDecompressor extends HttpContentDecoder {
return new EmbeddedChannel(ctx.channel().id(), ctx.channel().metadata().hasDisconnect(),
ctx.channel().config(), ZlibCodecFactory.newZlibDecoder(wrapper, maxAllocation));
}
- if (Brotli.isAvailable() && BR.contentEqualsIgnoreCase(contentEncoding)) {
- return new EmbeddedChannel(ctx.channel().id(), ctx.channel().metadata().hasDisconnect(),
- ctx.channel().config(), new BrotliDecoder());
- }
-
if (SNAPPY.contentEqualsIgnoreCase(contentEncoding)) {
return new EmbeddedChannel(ctx.channel().id(), ctx.channel().metadata().hasDisconnect(),
ctx.channel().config(), new SnappyFrameDecoder());
}
- if (Zstd.isAvailable() && ZSTD.contentEqualsIgnoreCase(contentEncoding)) {
- return new EmbeddedChannel(ctx.channel().id(), ctx.channel().metadata().hasDisconnect(),
- ctx.channel().config(), new ZstdDecoder());
- }
-
// 'identity' or unsupported
return null;
}
diff --git a/codec-http2/src/main/java/io/netty/handler/codec/http2/CompressorHttp2ConnectionEncoder.java b/codec-http2/src/main/java/io/netty/handler/codec/http2/CompressorHttp2ConnectionEncoder.java
index b12213dff6..23d719c32e 100644
--- a/codec-http2/src/main/java/io/netty/handler/codec/http2/CompressorHttp2ConnectionEncoder.java
+++ b/codec-http2/src/main/java/io/netty/handler/codec/http2/CompressorHttp2ConnectionEncoder.java
@@ -21,18 +21,12 @@ import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelPromise;
import io.netty.channel.embedded.EmbeddedChannel;
import io.netty.handler.codec.ByteToMessageDecoder;
-import io.netty.handler.codec.compression.BrotliEncoder;
import io.netty.handler.codec.compression.ZlibCodecFactory;
import io.netty.handler.codec.compression.ZlibWrapper;
-import io.netty.handler.codec.compression.Brotli;
-import io.netty.handler.codec.compression.BrotliOptions;
import io.netty.handler.codec.compression.CompressionOptions;
import io.netty.handler.codec.compression.DeflateOptions;
import io.netty.handler.codec.compression.GzipOptions;
import io.netty.handler.codec.compression.StandardCompressionOptions;
-import io.netty.handler.codec.compression.Zstd;
-import io.netty.handler.codec.compression.ZstdEncoder;
-import io.netty.handler.codec.compression.ZstdOptions;
import io.netty.handler.codec.compression.SnappyFrameEncoder;
import io.netty.handler.codec.compression.SnappyOptions;
import io.netty.util.concurrent.PromiseCombiner;
@@ -43,13 +37,11 @@ import java.util.List;
import static io.netty.handler.codec.http.HttpHeaderNames.CONTENT_ENCODING;
import static io.netty.handler.codec.http.HttpHeaderNames.CONTENT_LENGTH;
-import static io.netty.handler.codec.http.HttpHeaderValues.BR;
import static io.netty.handler.codec.http.HttpHeaderValues.DEFLATE;
import static io.netty.handler.codec.http.HttpHeaderValues.GZIP;
import static io.netty.handler.codec.http.HttpHeaderValues.IDENTITY;
import static io.netty.handler.codec.http.HttpHeaderValues.X_DEFLATE;
import static io.netty.handler.codec.http.HttpHeaderValues.X_GZIP;
-import static io.netty.handler.codec.http.HttpHeaderValues.ZSTD;
import static io.netty.handler.codec.http.HttpHeaderValues.SNAPPY;
/**
@@ -69,10 +61,8 @@ public class CompressorHttp2ConnectionEncoder extends DecoratingHttp2ConnectionE
private final boolean supportsCompressionOptions;
- private BrotliOptions brotliOptions;
private GzipOptions gzipCompressionOptions;
private DeflateOptions deflateOptions;
- private ZstdOptions zstdOptions;
private SnappyOptions snappyOptions;
/**
@@ -88,12 +78,6 @@ public class CompressorHttp2ConnectionEncoder extends DecoratingHttp2ConnectionE
compressionOptions.add(StandardCompressionOptions.gzip());
compressionOptions.add(StandardCompressionOptions.deflate());
compressionOptions.add(StandardCompressionOptions.snappy());
- if (Brotli.isAvailable()) {
- compressionOptions.add(StandardCompressionOptions.brotli());
- }
- if (Zstd.isAvailable()) {
- compressionOptions.add(StandardCompressionOptions.zstd());
- }
return compressionOptions.toArray(new CompressionOptions[0]);
}
@@ -139,14 +123,10 @@ public class CompressorHttp2ConnectionEncoder extends DecoratingHttp2ConnectionE
// This results in the static analysis of native-image identifying the instanceof BrotliOptions check
// and thus BrotliOptions itself as unreachable, enabling native-image to link all classes at build time
// and not complain about the missing Brotli classes.
- if (Brotli.isAvailable() && compressionOptions instanceof BrotliOptions) {
- brotliOptions = (BrotliOptions) compressionOptions;
- } else if (compressionOptions instanceof GzipOptions) {
+ if (compressionOptions instanceof GzipOptions) {
gzipCompressionOptions = (GzipOptions) compressionOptions;
} else if (compressionOptions instanceof DeflateOptions) {
deflateOptions = (DeflateOptions) compressionOptions;
- } else if (compressionOptions instanceof ZstdOptions) {
- zstdOptions = (ZstdOptions) compressionOptions;
} else if (compressionOptions instanceof SnappyOptions) {
snappyOptions = (SnappyOptions) compressionOptions;
} else {
@@ -286,15 +266,6 @@ public class CompressorHttp2ConnectionEncoder extends DecoratingHttp2ConnectionE
if (DEFLATE.contentEqualsIgnoreCase(contentEncoding) || X_DEFLATE.contentEqualsIgnoreCase(contentEncoding)) {
return newCompressionChannel(ctx, ZlibWrapper.ZLIB);
}
- if (Brotli.isAvailable() && brotliOptions != null && BR.contentEqualsIgnoreCase(contentEncoding)) {
- return new EmbeddedChannel(ctx.channel().id(), ctx.channel().metadata().hasDisconnect(),
- ctx.channel().config(), new BrotliEncoder(brotliOptions.parameters()));
- }
- if (zstdOptions != null && ZSTD.contentEqualsIgnoreCase(contentEncoding)) {
- return new EmbeddedChannel(ctx.channel().id(), ctx.channel().metadata().hasDisconnect(),
- ctx.channel().config(), new ZstdEncoder(zstdOptions.compressionLevel(),
- zstdOptions.blockSize(), zstdOptions.maxEncodeSize()));
- }
if (snappyOptions != null && SNAPPY.contentEqualsIgnoreCase(contentEncoding)) {
return new EmbeddedChannel(ctx.channel().id(), ctx.channel().metadata().hasDisconnect(),
ctx.channel().config(), new SnappyFrameEncoder());
diff --git a/codec-http2/src/main/java/io/netty/handler/codec/http2/DelegatingDecompressorFrameListener.java b/codec-http2/src/main/java/io/netty/handler/codec/http2/DelegatingDecompressorFrameListener.java
index 73e497ccb8..085ba2bc73 100644
--- a/codec-http2/src/main/java/io/netty/handler/codec/http2/DelegatingDecompressorFrameListener.java
+++ b/codec-http2/src/main/java/io/netty/handler/codec/http2/DelegatingDecompressorFrameListener.java
@@ -20,24 +20,18 @@ import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.channel.embedded.EmbeddedChannel;
import io.netty.handler.codec.ByteToMessageDecoder;
-import io.netty.handler.codec.compression.Brotli;
-import io.netty.handler.codec.compression.BrotliDecoder;
-import io.netty.handler.codec.compression.Zstd;
-import io.netty.handler.codec.compression.ZstdDecoder;
import io.netty.handler.codec.compression.ZlibCodecFactory;
import io.netty.handler.codec.compression.ZlibWrapper;
import io.netty.handler.codec.compression.SnappyFrameDecoder;
import static io.netty.handler.codec.http.HttpHeaderNames.CONTENT_ENCODING;
import static io.netty.handler.codec.http.HttpHeaderNames.CONTENT_LENGTH;
-import static io.netty.handler.codec.http.HttpHeaderValues.BR;
import static io.netty.handler.codec.http.HttpHeaderValues.DEFLATE;
import static io.netty.handler.codec.http.HttpHeaderValues.GZIP;
import static io.netty.handler.codec.http.HttpHeaderValues.IDENTITY;
import static io.netty.handler.codec.http.HttpHeaderValues.X_DEFLATE;
import static io.netty.handler.codec.http.HttpHeaderValues.X_GZIP;
import static io.netty.handler.codec.http.HttpHeaderValues.SNAPPY;
-import static io.netty.handler.codec.http.HttpHeaderValues.ZSTD;
import static io.netty.handler.codec.http2.Http2Error.INTERNAL_ERROR;
import static io.netty.handler.codec.http2.Http2Exception.streamError;
import static io.netty.util.internal.ObjectUtil.checkNotNull;
@@ -175,18 +169,10 @@ public class DelegatingDecompressorFrameListener extends Http2FrameListenerDecor
return new EmbeddedChannel(ctx.channel().id(), ctx.channel().metadata().hasDisconnect(),
ctx.channel().config(), ZlibCodecFactory.newZlibDecoder(wrapper, maxAllocation));
}
- if (Brotli.isAvailable() && BR.contentEqualsIgnoreCase(contentEncoding)) {
- return new EmbeddedChannel(ctx.channel().id(), ctx.channel().metadata().hasDisconnect(),
- ctx.channel().config(), new BrotliDecoder());
- }
if (SNAPPY.contentEqualsIgnoreCase(contentEncoding)) {
return new EmbeddedChannel(ctx.channel().id(), ctx.channel().metadata().hasDisconnect(),
ctx.channel().config(), new SnappyFrameDecoder());
}
- if (Zstd.isAvailable() && ZSTD.contentEqualsIgnoreCase(contentEncoding)) {
- return new EmbeddedChannel(ctx.channel().id(), ctx.channel().metadata().hasDisconnect(),
- ctx.channel().config(), new ZstdDecoder());
- }
// 'identity' or unsupported
return null;
}
diff --git a/codec/src/main/java/io/netty/handler/codec/compression/StandardCompressionOptions.java b/codec/src/main/java/io/netty/handler/codec/compression/StandardCompressionOptions.java
index 1397e12308..2f50f9d909 100644
--- a/codec/src/main/java/io/netty/handler/codec/compression/StandardCompressionOptions.java
+++ b/codec/src/main/java/io/netty/handler/codec/compression/StandardCompressionOptions.java
@@ -15,11 +15,10 @@
*/
package io.netty.handler.codec.compression;
-import com.aayushatharva.brotli4j.encoder.Encoder;
import io.netty.util.internal.ObjectUtil;
/**
- * Standard Compression Options for {@link BrotliOptions},
+ * Standard Compression Options for
* {@link GzipOptions} and {@link DeflateOptions}
*/
public final class StandardCompressionOptions {
@@ -28,66 +27,6 @@ public final class StandardCompressionOptions {
// Prevent outside initialization
}
- /**
- * Default implementation of {@link BrotliOptions} with {@link Encoder.Parameters#setQuality(int)} set to 4
- * and {@link Encoder.Parameters#setMode(Encoder.Mode)} set to {@link Encoder.Mode#TEXT}
- */
- public static BrotliOptions brotli() {
- return BrotliOptions.DEFAULT;
- }
-
- /**
- * Create a new {@link BrotliOptions}
- *
- * @param parameters {@link Encoder.Parameters} Instance
- * @throws NullPointerException If {@link Encoder.Parameters} is {@code null}
- * @deprecated Use {@link #brotli(int, int, BrotliMode)}
- */
- @Deprecated
- public static BrotliOptions brotli(Encoder.Parameters parameters) {
- return new BrotliOptions(parameters);
- }
-
- /**
- * Create a new {@link BrotliOptions}
- *
- * @param quality Specifies the compression level.
- * @param window Specifies the size of the sliding window when compressing.
- * @param mode optimizes the compression algorithm based on the type of input data.
- * @throws NullPointerException If {@link BrotliMode} is {@code null}
- */
- public static BrotliOptions brotli(int quality, int window, BrotliMode mode) {
- ObjectUtil.checkInRange(quality, 0, 11, "quality");
- ObjectUtil.checkInRange(window, 10, 24, "window");
- ObjectUtil.checkNotNull(mode, "mode");
-
- Encoder.Parameters parameters = new Encoder.Parameters()
- .setQuality(quality)
- .setWindow(window)
- .setMode(mode.adapt());
- return new BrotliOptions(parameters);
- }
-
- /**
- * Default implementation of {@link ZstdOptions} with{compressionLevel(int)} set to
- * {@link ZstdConstants#DEFAULT_COMPRESSION_LEVEL},{@link ZstdConstants#DEFAULT_BLOCK_SIZE},
- * {@link ZstdConstants#DEFAULT_MAX_ENCODE_SIZE}
- */
- public static ZstdOptions zstd() {
- return ZstdOptions.DEFAULT;
- }
-
- /**
- * Create a new {@link ZstdOptions}
- *
- * @param blockSize is used to calculate the compressionLevel
- * @param maxEncodeSize specifies the size of the largest compressed object
- * @param compressionLevel specifies the level of the compression
- */
- public static ZstdOptions zstd(int compressionLevel, int blockSize, int maxEncodeSize) {
- return new ZstdOptions(compressionLevel, blockSize, maxEncodeSize);
- }
-
/**
* Create a new {@link SnappyOptions}
*/
--
2.53.0