eclipse-ee4j / grizzly

Grizzly
https://eclipse-ee4j.github.io/grizzly
Other
147 stars 69 forks source link

http2 can't work with cyrillic symbols #2104

Closed cergean closed 1 year ago

cergean commented 4 years ago

in master/modules/http2/src/main/java/org/glassfish/grizzly/http2/hpack/Huffman.java

method

private Code codeOf(char c) { if (c > 255) { throw new IllegalArgumentException("char=" + (int) c); } return codes[c]; }

can't correctly process cyrillic symbols (chars always greater than 255), If header contain any cyrillic symbol, we're receiveng an error:

2020-09-04T13:14:48.748+0300] [Payara 5.201] [WARNING] [] [org.glassfish.grizzly.filterchain.DefaultFilterChain] [tid: _ThreadID=84 _ThreadName=http-thread-pool::http-listener-2(4)] [timeMillis: 1599214488748] [levelValue: 900] [[ GRIZZLY0013: Exception during FilterChain execution java.lang.IllegalArgumentException: char=1060 at org.glassfish.grizzly.http2.hpack.Huffman.codeOf(Huffman.java:545) at org.glassfish.grizzly.http2.hpack.Huffman.lengthOf(Huffman.java:510) at org.glassfish.grizzly.http2.hpack.StringWriter.configure(StringWriter.java:70) at org.glassfish.grizzly.http2.hpack.StringWriter.configure(StringWriter.java:55) at org.glassfish.grizzly.http2.hpack.IndexNameValueWriter.value(IndexNameValueWriter.java:57) at org.glassfish.grizzly.http2.hpack.Encoder.literal(Encoder.java:340) at org.glassfish.grizzly.http2.hpack.Encoder.header(Encoder.java:197) at org.glassfish.grizzly.http2.hpack.Encoder.header(Encoder.java:159) at org.glassfish.grizzly.http2.HeadersEncoder.encodeHeader(HeadersEncoder.java:55) at org.glassfish.grizzly.http2.EncoderUtils.encodeUserHeaders(EncoderUtils.java:222) at org.glassfish.grizzly.http2.EncoderUtils.encodeResponseHeaders(EncoderUtils.java:72) at org.glassfish.grizzly.http2.Http2Session.encodeHttpHeaderAsHeaderFrames(Http2Session.java:835) at org.glassfish.grizzly.http2.DefaultOutputSink.writeDownStream(DefaultOutputSink.java:282) at org.glassfish.grizzly.http2.Http2ServerFilter.processOutgoingHttpHeader(Http2ServerFilter.java:970) at org.glassfish.grizzly.http2.Http2BaseFilter.handleWrite(Http2BaseFilter.java:729) at org.glassfish.grizzly.filterchain.ExecutorResolver$8.execute(ExecutorResolver.java:87) at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:260) at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:177) at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:109) at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:88) at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:53) at org.glassfish.grizzly.filterchain.FilterChainContext.write(FilterChainContext.java:867) at org.glassfish.grizzly.filterchain.FilterChainContext.write(FilterChainContext.java:835) at org.glassfish.grizzly.http.io.OutputBuffer.flushBuffer(OutputBuffer.java:1068) at org.glassfish.grizzly.http.io.OutputBuffer.write(OutputBuffer.java:695) at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:338) at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:325) at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:158)

Disabling http/2 in payara prevents this issue.