From 5e42be1b3485949ccecd6b9068d603b298177e17 Mon Sep 17 00:00:00 2001 From: Algin Maduro Date: Tue, 1 Sep 2020 12:59:07 +0200 Subject: [PATCH 1/2] fix: preserve original error code if present --- packages/grpc-js/src/server-call.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/grpc-js/src/server-call.ts b/packages/grpc-js/src/server-call.ts index 3ff4c55e5..7c7400133 100644 --- a/packages/grpc-js/src/server-call.ts +++ b/packages/grpc-js/src/server-call.ts @@ -743,7 +743,10 @@ export class Http2ServerCallStream< // Ignore any remaining messages when errors occur. this.bufferedMessages.length = 0; - err.code = Status.INTERNAL; + if(!err.code){ + err.code = Status.INTERNAL; + } + readable.emit('error', err); } From aaee068a6972d9ff18db8fc19c460b02b1a0b5ff Mon Sep 17 00:00:00 2001 From: Algin Maduro Date: Tue, 1 Sep 2020 13:28:23 +0200 Subject: [PATCH 2/2] fix: add addition check if the provided code is valid gRPC code --- packages/grpc-js/src/server-call.ts | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/packages/grpc-js/src/server-call.ts b/packages/grpc-js/src/server-call.ts index 7c7400133..fad0eddb0 100644 --- a/packages/grpc-js/src/server-call.ts +++ b/packages/grpc-js/src/server-call.ts @@ -739,15 +739,24 @@ export class Http2ServerCallStream< } else { this.messagesToPush.push(deserialized); } - } catch (err) { + } catch (error) { // Ignore any remaining messages when errors occur. this.bufferedMessages.length = 0; - if(!err.code){ - err.code = Status.INTERNAL; + if ( + !( + 'code' in error && + typeof error.code === 'number' && + Number.isInteger(error.code) && + error.code >= Status.OK && + error.code <= Status.UNAUTHENTICATED + ) + ) { + // The error code is not a valid gRPC code so its being overwritten. + error.code = Status.INTERNAL; } - - readable.emit('error', err); + + readable.emit('error', error); } this.isPushPending = false;