Go to file
Scott Mitchell 2fd42cfc6b HTTP/2 Max Header List Size Bug
Motivation:
If the HPACK Decoder detects that SETTINGS_MAX_HEADER_LIST_SIZE has been violated it aborts immediately and sends a RST_STREAM frame for what ever stream caused the issue. Because HPACK is stateful this means that the HPACK state may become out of sync between peers, and the issue won't be detected until the next headers frame. We should make a best effort to keep processing to keep the HPACK state in sync with our peer, or completely close the connection.
If the HPACK Encoder is configured to verify SETTINGS_MAX_HEADER_LIST_SIZE it checks the limit and encodes at the same time. This may result in modifying the HPACK local state but not sending the headers to the peer if SETTINGS_MAX_HEADER_LIST_SIZE is violated. This will also lead to an inconsistency in HPACK state that will be flagged at some later time.

Modifications:
- HPACK Decoder now has 2 levels of limits related to SETTINGS_MAX_HEADER_LIST_SIZE. The first will attempt to keep processing data and send a RST_STREAM after all data is processed. The second will send a GO_AWAY and close the entire connection.
- When the HPACK Encoder enforces SETTINGS_MAX_HEADER_LIST_SIZE it should not modify the HPACK state until the size has been checked.
- https://tools.ietf.org/html/rfc7540#section-6.5.2 states that the initial value of SETTINGS_MAX_HEADER_LIST_SIZE is "unlimited". We currently use 8k as a limit. We should honor the specifications default value so we don't unintentionally close a connection before the remote peer is aware of the local settings.
- Remove unnecessary object allocation in DefaultHttp2HeadersDecoder and DefaultHttp2HeadersEncoder.

Result:
Fixes https://github.com/netty/netty/issues/6209.
2017-01-19 10:42:43 -08:00
.github Use GitHub Issue/PR Template Feature 2016-12-07 11:40:26 -08:00
all [maven-release-plugin] prepare for next development iteration 2017-01-12 11:36:51 +01:00
buffer [maven-release-plugin] prepare for next development iteration 2017-01-12 11:36:51 +01:00
codec Flush LZ4FrameEncoder buffer when channel flush() is received. 2017-01-18 10:57:21 -08:00
codec-dns [maven-release-plugin] prepare for next development iteration 2017-01-12 11:36:51 +01:00
codec-haproxy [maven-release-plugin] prepare for next development iteration 2017-01-12 11:36:51 +01:00
codec-http [maven-release-plugin] prepare for next development iteration 2017-01-12 11:36:51 +01:00
codec-http2 HTTP/2 Max Header List Size Bug 2017-01-19 10:42:43 -08:00
codec-memcache [maven-release-plugin] prepare for next development iteration 2017-01-12 11:36:51 +01:00
codec-mqtt [maven-release-plugin] prepare for next development iteration 2017-01-12 11:36:51 +01:00
codec-redis [maven-release-plugin] prepare for next development iteration 2017-01-12 11:36:51 +01:00
codec-smtp [maven-release-plugin] prepare for next development iteration 2017-01-12 11:36:51 +01:00
codec-socks [maven-release-plugin] prepare for next development iteration 2017-01-12 11:36:51 +01:00
codec-stomp [maven-release-plugin] prepare for next development iteration 2017-01-12 11:36:51 +01:00
codec-xml [maven-release-plugin] prepare for next development iteration 2017-01-12 11:36:51 +01:00
common Do not replace System.err during Slf4JLoggerFactory construction 2017-01-19 19:28:01 +01:00
example HTTP/2 Max Header List Size Bug 2017-01-19 10:42:43 -08:00
handler Run all tests in SSLEngineTest with heap, direct and mixed buffers 2017-01-19 19:18:31 +01:00
handler-proxy [maven-release-plugin] prepare for next development iteration 2017-01-12 11:36:51 +01:00
license added support for Protobuf codec nano runtime 2016-01-19 21:39:17 +01:00
microbench HTTP/2 Max Header List Size Bug 2017-01-19 10:42:43 -08:00
resolver [maven-release-plugin] prepare for next development iteration 2017-01-12 11:36:51 +01:00
resolver-dns Respect resolvedAddressTypes when follow CNAME records. 2017-01-19 19:36:56 +01:00
tarball [maven-release-plugin] prepare for next development iteration 2017-01-12 11:36:51 +01:00
testsuite [maven-release-plugin] prepare for next development iteration 2017-01-12 11:36:51 +01:00
testsuite-osgi [maven-release-plugin] prepare for next development iteration 2017-01-12 11:36:51 +01:00
transport Remove unnecessray for loop missed by fac0ca8319 2017-01-19 19:13:57 +01:00
transport-native-epoll [maven-release-plugin] prepare for next development iteration 2017-01-12 11:36:51 +01:00
transport-rxtx [maven-release-plugin] prepare for next development iteration 2017-01-12 11:36:51 +01:00
transport-sctp [maven-release-plugin] prepare for next development iteration 2017-01-12 11:36:51 +01:00
transport-udt [maven-release-plugin] prepare for next development iteration 2017-01-12 11:36:51 +01:00
.fbprefs Updated Find Bugs configuration 2009-03-04 10:33:09 +00:00
.gitignore Use shaded dependency on JCTools instead of copy and paste 2016-06-10 13:19:45 +02:00
.travis.yml Travis CI branch whitelisting 2013-03-11 09:55:43 +09:00
CONTRIBUTING.md Move the pull request guide to the developer guide 2014-03-12 13:13:58 +09:00
LICENSE.txt Relicensed to Apache License v2 2009-08-28 07:15:49 +00:00
NOTICE.txt added support for Protobuf codec nano runtime 2016-01-19 21:39:17 +01:00
pom.xml [maven-release-plugin] prepare for next development iteration 2017-01-12 11:36:51 +01:00
README.md Updating Branches to look section to match the current branching structure of the project 2016-03-10 22:08:01 +01:00
run-example.sh Add an example client for codec-redis 2016-04-23 11:18:12 -07:00

Netty Project

Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients.

How to build

For the detailed information about building and developing Netty, please visit the developer guide. This page only gives very basic information.

You require the following to build Netty:

Note that this is build-time requirement. JDK 5 (for 3.x) or 6 (for 4.0+) is enough to run your Netty-based application.

Branches to look

Development of all versions takes place in each branch whose name is identical to <majorVersion>.<minorVersion>. For example, the development of 3.9 and 4.0 resides in the branch '3.9' and the branch '4.0' respectively.