Skip to content

Commit 71abaa0

Browse files
committed
Fix io.grpc.servlet.jakarta.ServletAdapter#getHeaders for non-lowercased keys
1 parent 6244e86 commit 71abaa0

1 file changed

Lines changed: 9 additions & 10 deletions

File tree

grpc-java/grpc-servlet-jakarta/src/main/java/io/grpc/servlet/jakarta/ServletAdapter.java

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import io.grpc.ExperimentalApi;
1919
import io.grpc.Grpc;
2020
import io.grpc.InternalLogId;
21-
import io.grpc.InternalMetadata;
2221
import io.grpc.Metadata;
2322
import io.grpc.ServerStreamTracer;
2423
import io.grpc.Status;
@@ -38,11 +37,10 @@
3837
import java.net.InetSocketAddress;
3938
import java.net.URI;
4039
import java.net.URISyntaxException;
41-
import java.nio.charset.StandardCharsets;
42-
import java.util.ArrayList;
4340
import java.util.Arrays;
4441
import java.util.Enumeration;
4542
import java.util.List;
43+
import java.util.Locale;
4644
import java.util.concurrent.TimeUnit;
4745
import java.util.concurrent.atomic.AtomicBoolean;
4846
import java.util.logging.Logger;
@@ -181,25 +179,26 @@ private static Metadata getHeaders(HttpServletRequest req) {
181179
Enumeration<String> headerNames = req.getHeaderNames();
182180
checkNotNull(
183181
headerNames, "Servlet container does not allow HttpServletRequest.getHeaderNames()");
184-
List<byte[]> byteArrays = new ArrayList<>();
182+
Metadata metadata = new Metadata();
185183
while (headerNames.hasMoreElements()) {
186184
String headerName = headerNames.nextElement();
187185
Enumeration<String> values = req.getHeaders(headerName);
188186
if (values == null) {
189187
continue;
190188
}
189+
headerName = headerName.toLowerCase(Locale.ROOT);
190+
boolean isBinaryHeader = headerName.endsWith(Metadata.BINARY_HEADER_SUFFIX);
191191
while (values.hasMoreElements()) {
192192
String value = values.nextElement();
193-
if (headerName.endsWith(Metadata.BINARY_HEADER_SUFFIX)) {
194-
byteArrays.add(headerName.getBytes(StandardCharsets.US_ASCII));
195-
byteArrays.add(BaseEncoding.base64().decode(value));
193+
if (isBinaryHeader) {
194+
metadata.put(Metadata.Key.of(headerName, Metadata.BINARY_BYTE_MARSHALLER),
195+
BaseEncoding.base64().decode(value));
196196
} else {
197-
byteArrays.add(headerName.getBytes(StandardCharsets.US_ASCII));
198-
byteArrays.add(value.getBytes(StandardCharsets.US_ASCII));
197+
metadata.put(Metadata.Key.of(headerName, Metadata.ASCII_STRING_MARSHALLER), value);
199198
}
200199
}
201200
}
202-
return InternalMetadata.newMetadata(byteArrays.toArray(new byte[][] {}));
201+
return metadata;
203202
}
204203

205204
// This method must use HttpRequest#getRequestURL or HttpUtils#getRequestURL, both of which

0 commit comments

Comments
 (0)