-
Bug
-
Resolution: Done
-
Blocker
-
1.3.0.Beta3
-
None
According to specification [1] HTTP2-Settings should be encoded using base64url encoding, which uses as last two characters - and _ [2]. Undertow instead uses mime implementation of Base64 encoding which uses + and / and thus results in undertow failing to parse the HTTP2-Settings and thus connection not being established [3] when HTTP2-Settings Header contains one of those two characters.
[1] http://tools.ietf.org/html/rfc7540#page-9
[2] https://tools.ietf.org/html/rfc4648#section-5
[3]
12:45:10,868 ERROR [io.undertow.request] (default I/O-1) Undertow request failed HttpServerExchange{ GET /}: java.io.IOException: Invalid base64 character encountered: 95 at io.undertow.util.FlexBase64$Decoder.nextByte(FlexBase64.java:881) at io.undertow.util.FlexBase64$Decoder.nextByte(FlexBase64.java:848) at io.undertow.util.FlexBase64$Decoder.decode(FlexBase64.java:1122) at io.undertow.util.FlexBase64$Decoder.decode(FlexBase64.java:1179) at io.undertow.util.FlexBase64$Decoder.decode(FlexBase64.java:1245) at io.undertow.util.FlexBase64$Decoder.access$500(FlexBase64.java:819) at io.undertow.util.FlexBase64.decode(FlexBase64.java:193) at io.undertow.server.protocol.http2.Http2UpgradeHandler.handleRequest(Http2UpgradeHandler.java:56) at io.undertow.server.Connectors.executeRootHandler(Connectors.java:199) at io.undertow.server.protocol.http.HttpReadListener.handleEventWithNoRunningRequest(HttpReadListener.java:227) at io.undertow.server.protocol.http.HttpReadListener.handleEvent(HttpReadListener.java:128) at io.undertow.server.protocol.http.HttpOpenListener.handleEvent(HttpOpenListener.java:143) at io.undertow.server.protocol.http.HttpOpenListener.handleEvent(HttpOpenListener.java:90) at io.undertow.server.protocol.http.HttpOpenListener.handleEvent(HttpOpenListener.java:49) at org.xnio.ChannelListeners.invokeChannelListener(ChannelListeners.java:92) at org.xnio.ChannelListeners$10.handleEvent(ChannelListeners.java:291) at org.xnio.ChannelListeners$10.handleEvent(ChannelListeners.java:286) at org.xnio.ChannelListeners.invokeChannelListener(ChannelListeners.java:92) at org.xnio.nio.NioTcpServerHandle.handleReady(NioTcpServerHandle.java:53) at org.xnio.nio.WorkerThread.run(WorkerThread.java:539)
- clones
-
JBEAP-430 Undertow uses incorrect base64 encoding for HTTP2-Settings
- Closed