From 0c606f4408dff4433ab5987cf9a6a495d0691b87 Mon Sep 17 00:00:00 2001 From: cjihrig Date: Sun, 9 Sep 2018 14:57:33 -0400 Subject: [PATCH] grpc-js-core: ignore reserved headers in fromHttp2Headers() Metadata.fromHttp2Headers() throws if any reserved headers are passed. Instead of deleting headers before calling the function, this commit causes the function to ignore reserved headers. --- packages/grpc-js-core/src/call-stream.ts | 3 +-- packages/grpc-js-core/src/metadata.ts | 5 +++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/grpc-js-core/src/call-stream.ts b/packages/grpc-js-core/src/call-stream.ts index 20eca023..840d7f2b 100644 --- a/packages/grpc-js-core/src/call-stream.ts +++ b/packages/grpc-js-core/src/call-stream.ts @@ -233,8 +233,7 @@ export class Http2CallStream extends Duplex implements Call { default: this.mappedStatusCode = Status.UNKNOWN; } - delete headers[HTTP2_HEADER_STATUS]; - delete headers[HTTP2_HEADER_CONTENT_TYPE]; + if (flags & http2.constants.NGHTTP2_FLAG_END_STREAM) { this.handleTrailers(headers); } else { diff --git a/packages/grpc-js-core/src/metadata.ts b/packages/grpc-js-core/src/metadata.ts index 48cfb6f3..574b549f 100644 --- a/packages/grpc-js-core/src/metadata.ts +++ b/packages/grpc-js-core/src/metadata.ts @@ -197,6 +197,11 @@ export class Metadata { static fromHttp2Headers(headers: http2.IncomingHttpHeaders): Metadata { const result = new Metadata(); forOwn(headers, (values, key) => { + // Reserved headers (beginning with `:`) are not valid keys. + if (key.charAt(0) === ':') { + return; + } + if (isBinaryKey(key)) { if (Array.isArray(values)) { values.forEach((value) => {