Skip to content

Commit 5c98953

Browse files
committed
Should no longer be necessary to do the filtering in TransportFrameUtil.
1 parent c6d02f2 commit 5c98953

File tree

2 files changed

+8
-38
lines changed

2 files changed

+8
-38
lines changed

core/src/main/java/io/grpc/internal/TransportFrameUtil.java

Lines changed: 8 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import java.util.ArrayList;
2525
import java.util.Arrays;
2626
import java.util.List;
27-
import java.util.logging.Logger;
2827
import javax.annotation.CheckReturnValue;
2928

3029
/**
@@ -35,8 +34,6 @@
3534
*/
3635
public final class TransportFrameUtil {
3736

38-
private static final Logger logger = Logger.getLogger(TransportFrameUtil.class.getName());
39-
4037
private static final byte[] binaryHeaderSuffixBytes =
4138
Metadata.BINARY_HEADER_SUFFIX.getBytes(US_ASCII);
4239

@@ -57,26 +54,14 @@ public static byte[][] toHttp2Headers(Metadata headers) {
5754
for (int i = 0; i < serializedHeaders.length; i += 2) {
5855
byte[] key = serializedHeaders[i];
5956
byte[] value = serializedHeaders[i + 1];
60-
if (endsWith(key, binaryHeaderSuffixBytes)) {
61-
// Binary header.
62-
serializedHeaders[k] = key;
63-
serializedHeaders[k + 1]
64-
= InternalMetadata.BASE64_ENCODING_OMIT_PADDING.encode(value).getBytes(US_ASCII);
65-
k += 2;
66-
} else {
67-
// Non-binary header.
68-
// Filter out headers that contain non-spec-compliant ASCII characters.
69-
// TODO(zhangkun83): only do such check in development mode since it's expensive
70-
if (isSpecCompliantAscii(value)) {
71-
serializedHeaders[k] = key;
72-
serializedHeaders[k + 1] = value;
73-
k += 2;
74-
} else {
75-
String keyString = new String(key, US_ASCII);
76-
logger.warning("Metadata key=" + keyString + ", value=" + Arrays.toString(value)
77-
+ " contains invalid ASCII characters");
78-
}
79-
}
57+
serializedHeaders[k] = key;
58+
serializedHeaders[k + 1] =
59+
endsWith(key, binaryHeaderSuffixBytes)
60+
// Binary header.
61+
? InternalMetadata.BASE64_ENCODING_OMIT_PADDING.encode(value).getBytes(US_ASCII)
62+
// Non-binary header.
63+
: value;
64+
k += 2;
8065
}
8166
// Fast path, everything worked out fine.
8267
if (k == serializedHeaders.length) {
@@ -163,18 +148,5 @@ private static boolean endsWith(byte[] subject, byte[] suffix) {
163148
return true;
164149
}
165150

166-
/**
167-
* Returns {@code true} if {@code subject} contains only bytes that are spec-compliant ASCII
168-
* characters and space.
169-
*/
170-
private static boolean isSpecCompliantAscii(byte[] subject) {
171-
for (byte b : subject) {
172-
if (b < 32 || b > 126) {
173-
return false;
174-
}
175-
}
176-
return true;
177-
}
178-
179151
private TransportFrameUtil() {}
180152
}

core/src/test/java/io/grpc/internal/TransportFrameUtilTest.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,6 @@ public void testToHttp2Headers() {
7171
Metadata headers = new Metadata();
7272
headers.put(PLAIN_STRING, COMPLIANT_ASCII_STRING);
7373
headers.put(BINARY_STRING, NONCOMPLIANT_ASCII_STRING);
74-
headers.put(BINARY_STRING_WITHOUT_SUFFIX, NONCOMPLIANT_ASCII_STRING);
7574
byte[][] http2Headers = TransportFrameUtil.toHttp2Headers(headers);
7675
// BINARY_STRING_WITHOUT_SUFFIX should not get in because it contains non-compliant ASCII
7776
// characters but doesn't have "-bin" in the name.
@@ -96,7 +95,6 @@ public void testToAndFromHttp2Headers() {
9695
Metadata headers = new Metadata();
9796
headers.put(PLAIN_STRING, COMPLIANT_ASCII_STRING);
9897
headers.put(BINARY_STRING, NONCOMPLIANT_ASCII_STRING);
99-
headers.put(BINARY_STRING_WITHOUT_SUFFIX, NONCOMPLIANT_ASCII_STRING);
10098
byte[][] http2Headers = TransportFrameUtil.toHttp2Headers(headers);
10199
byte[][] rawSerialized = TransportFrameUtil.toRawSerializedHeaders(http2Headers);
102100
Metadata recoveredHeaders = InternalMetadata.newMetadata(rawSerialized);

0 commit comments

Comments
 (0)