Skip to content

Commit 9277437

Browse files
committedMar 6, 2021
[fix] Recreate the inflate stream if it ends
Refs: nodejs/node#37612
1 parent cbff929 commit 9277437

File tree

2 files changed

+30
-4
lines changed

2 files changed

+30
-4
lines changed
 

‎lib/permessage-deflate.js

+9-4
Original file line numberDiff line numberDiff line change
@@ -376,11 +376,16 @@ class PerMessageDeflate {
376376
this._inflate[kTotalLength]
377377
);
378378

379-
this._inflate[kTotalLength] = 0;
380-
this._inflate[kBuffers] = [];
379+
if (this._inflate._readableState.endEmitted) {
380+
this._inflate.close();
381+
this._inflate = null;
382+
} else {
383+
this._inflate[kTotalLength] = 0;
384+
this._inflate[kBuffers] = [];
381385

382-
if (fin && this.params[`${endpoint}_no_context_takeover`]) {
383-
this._inflate.reset();
386+
if (fin && this.params[`${endpoint}_no_context_takeover`]) {
387+
this._inflate.reset();
388+
}
384389
}
385390

386391
callback(null, data);

‎test/permessage-deflate.test.js

+21
Original file line numberDiff line numberDiff line change
@@ -631,5 +631,26 @@ describe('PerMessageDeflate', () => {
631631

632632
process.nextTick(() => perMessageDeflate.cleanup());
633633
});
634+
635+
it('recreates the inflate stream if it ends', (done) => {
636+
const perMessageDeflate = new PerMessageDeflate();
637+
const extensions = extension.parse(
638+
'permessage-deflate; client_no_context_takeover; ' +
639+
'server_no_context_takeover'
640+
);
641+
const buf = Buffer.from('33343236313533b7000000', 'hex');
642+
const expected = Buffer.from('12345678');
643+
644+
perMessageDeflate.accept(extensions['permessage-deflate']);
645+
646+
perMessageDeflate.decompress(buf, true, (err, data) => {
647+
assert.ok(data.equals(expected));
648+
649+
perMessageDeflate.decompress(buf, true, (err, data) => {
650+
assert.ok(data.equals(expected));
651+
done();
652+
});
653+
});
654+
});
634655
});
635656
});

0 commit comments

Comments
 (0)
Please sign in to comment.