Skip to content

Commit 5b8d37b

Browse files
authored
Merge commit from fork
Fix crashes when receiving malformed compressed data (1.14.x)
2 parents 6a97456 + 5029a26 commit 5b8d37b

2 files changed

Lines changed: 18 additions & 0 deletions

File tree

packages/grpc-js/src/compression-filter.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,12 @@ class DeflateHandler extends CompressionHandler {
119119
let totalLength = 0;
120120
const messageParts: Buffer[] = [];
121121
const decompresser = zlib.createInflate();
122+
decompresser.on('error', (error: Error) => {
123+
reject({
124+
code: Status.INTERNAL,
125+
details: 'Failed to decompress deflate-encoded message'
126+
});
127+
});
122128
decompresser.on('data', (chunk: Buffer) => {
123129
messageParts.push(chunk);
124130
totalLength += chunk.byteLength;
@@ -161,6 +167,12 @@ class GzipHandler extends CompressionHandler {
161167
let totalLength = 0;
162168
const messageParts: Buffer[] = [];
163169
const decompresser = zlib.createGunzip();
170+
decompresser.on('error', (error: Error) => {
171+
reject({
172+
code: Status.INTERNAL,
173+
details: 'Failed to decompress gzip-encoded message'
174+
});
175+
});
164176
decompresser.on('data', (chunk: Buffer) => {
165177
messageParts.push(chunk);
166178
totalLength += chunk.byteLength;

packages/grpc-js/src/server-interceptors.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -736,6 +736,12 @@ export class BaseServerInterceptingCall
736736
return new Promise((resolve, reject) => {
737737
let totalLength = 0
738738
const messageParts: Buffer[] = [];
739+
decompresser.on('error', (error: Error) => {
740+
reject({
741+
code: Status.INTERNAL,
742+
details: 'Failed to decompress message'
743+
});
744+
});
739745
decompresser.on('data', (chunk: Buffer) => {
740746
messageParts.push(chunk);
741747
totalLength += chunk.byteLength;

0 commit comments

Comments
 (0)