Netty 4.1.140.Final released
We are happy to announce the release of Netty 4.1.140.Final. This is a bug-fix and security release.
Note that Netty 4.1 will be End-of-Life on July 1st, 2027.
We strongly recommend upgrading to this version to get the following security fixes:
- CVE-2026-XXXXX : out-of-bounds read in
netty-buffer - CVE-2026-XXXXX : out-of-bounds read in
netty-buffer - CVE-2026-XXXXX : insufficient entropy in
netty-resolver-dns - CVE-2026-XXXXX : unbounded memory usage in
netty-codec-http2 - CVE-2026-XXXXX : insufficient control character neutralization in
netty-codec-http - CVE-2026-XXXXX : out-of-bounds read in
netty-buffer - CVE-2026-XXXXX : unbounded memory usage in
netty-codec-mqtt - CVE-2026-XXXXX : mTLS auth bypass via session resumption in
netty-handler
Other significant changes are:
- Reject Redis lines that start with LF #17806
- Do not let a negatively cached search domain shadow a positive one #17805
- Choose server key types from client's signature algorithms for TLS 1.3 #17809
- LocalChannel: Deliver data written by the peer before it closed #17815
- Validate padding of
HEADERSframes without priority #17819 - Don't spin in
SslHandler.wrapMultiple(...)when the engine consumes nothing #17822 - Preserve invalid SNI names in
ReferenceCountedOpenSslEngine#17824 - Optimize redundant bounds checking in
ByteBuf.setBytes#17827 - Release the DNS response when a query future loses a cancel race #17828
- Fix
HpackDynamicTablelosing entries when filled to capacity #17846 - Throw
UnsupportedOperationExceptionfromAdaptiveByteBuf.memoryAddress()without an address #17842 - Handle
ed25519anded448names inSignatureAlgorithmConverter#17850 - HAProxyMessage: validate the length of all TLV types #17845
- Validate bzip2 Huffman code lengths before building decode tables #17855
- Validate header values on
DefaultHeaders.copy(), bulkadd, entrysetValueandReadOnlyHttpHeaders#17854 - Fix typos in comments/javadoc #17863
- HAProxyMessageEncoder: encode v1
PROXY UNKNOWNheaders #17860 - Throw
DecompressionExceptiononJdkZlibpreset dictionary mismatch #17864 - Apply certificate list size floor #17861
- Reject HTTP version numbers that overflow int #17859
- HAProxyMessage: decode TLVs with an empty value at the end of the header #17877
- Honor
maxAllocationfor brotli inDelegatingDecompressorFrameListener#17881 - Reject invalid content-length in
PUSH_PROMISEwith a stream error #17875 - HAProxyMessageDecoder: fix v2 header framing with a non-zero reader index #17882
- Skip JNDI nameserver lookup on IBM i #17892
- Reset the
h2cupgrade stream if the request can not be converted #17893 - Fix NPE in
Http2FrameCodecwhenh2cupgrade fails #17899 - Don't size
ZstdDecoderoutput buffers from the frame content size #17900 - Don't lose frames when a delimiter is split across reads #17909
- Read SOCKS5 length octets unsigned in the legacy socks decoders #17916
- Fix truncated output in Brotli decoders #17923
- Port: Wrap trailing ';' in
Content-DispositionasErrorDataDecoderException#17931 - Kqueue: Deregister filters before closing the
fdto avoid hitting a reusedfd#17939 - Keep
WINDOW_UPDATEcredit of reserved HTTP/2 streams on activation #17935 - Accept empty non-final fragments in
PerMessageDeflateEncoder#17953 - HTTP/2: Don't pass the close promise to a deferred close #17959
- Fix endless value iterators in
ReadOnlyHttpHeaders#17978 - Don't drop the last character in
AsciiString.trim(CharSequence)#17993 - Fix the region copied by
Unpooled.copiedBuffer(CharSequence, int, int, Charset)#17995 - Add HpackDecoder test for non-token HTTP/2 header names #17992
- Fix
AsciiString.contains(...)false negatives after a partial match #17986 - Treat DATA frames on reserved HTTP/2 streams as a connection error #17998
- Reject reply codes with non-digit characters in
SmtpResponseDecoder#18005 - Don't loop forever in
AbstractDiskHttpDatawhen the file is short #18004 - Http2: reject generic frames whose payload exceeds
SETTINGS_MAX_FRAME_SIZE#18000 - Return
nullor the default from read-only headers for invalid values #18017 - Check the second gzip magic byte in
JdkZlibDecoder#18007 - Fix server-initiated WebSocket close handshake failing with "promise already done" #18032
- Fix
Snappy.encode(...)for input with a non-zero reader index #18031 - MqttEncoder: Reject Variable Byte Integers larger than 268435455 #18025
- Only delete socket files when binding and closing UDS channels #18044
- Return the haystack's reader index from
ByteBufUtil.indexOf(...)for an empty needle #18082 - Return -1 from
StringUtil.decodeHexNibble(byte)for non-ASCII bytes #18083 - Fail to encode DNS messages that are too large for TCP #18081
- Don't return an entry twice when removing while iterating a primitive map #18087
- Mark disk-based HttpData as completed after setting empty content #18088
- Fix out-of-bounds read when validating UDS paths in the native code #18016
- Release a SPDY
DATAframe that exceeds the session window #18094 - Send zero-length datagrams instead of dropping or duplicating them #18107
- Reject request-only and response-only pseudo-headers in invalid contexts (RFC 9113) #18113
- Read all pending data when the EOF is received before the connect is complete in
kqueue#18116 - Read the 4 byte Snappy literal length as unsigned #18120
- Deliver all data a
LocalChannelpeer wrote before it closed #18128 - Close an HTTP/2 stream only after its last merged
DATAframe was written #18144 - Use
IP_MULTICAST_IFin leaveGroup and block without an interface #18152 - Don't lose the alert when the handshake fails in
ReferenceCountedOpen…#18157 - Send
bad_certificatealert when theTrustManagerrejects the certificate #18181 - SslHandler: Size the unwrap output buffer for the plaintext, not the record #18182
- Add opt-in Origin validation to
WebSocketServerProtocolHandler(hardening) #18184 - Fix reporting of the wrong error when setting flags on an accepted
fdfails #18196 - Epoll: Verify the
FileChannelis aFileChannelImplbefore reading itsfd#18190 - KQueue: Verify the
FileChannelis aFileChannelImplbefore reading itsfd#18191 - Do not send uninitialized stack memory when sending a
fdover a domain socket #18197 - Fix read of uninitialized memory when accepting a connection on a domain socket #18195
- Epoll: Fix signed integer overflow when calculating the
epoll_waittimeout #18194 - Fix underflow detection in
netty_unix_util_timespec_subtract_ns#18193 - Don't encode Snappy copies with an offset that does not fit into 16 bits #18224
- Don't truncate binary memcache key and extras lengths #18225
- Update to latest netty-tcnative release #18236
- Security fixes #18238
For more details please see the complete release notes.
Thank You
Every idea and bug-report counts, and so we thought it is worth mentioning those who helped in this area.
Please report an unintended omission.