Navigation Menu

Skip to content

Commit

Permalink
http2: fix error stream write followed by destroy
Browse files Browse the repository at this point in the history
PR-URL: #35951
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Ricky Zhou <0x19951125@gmail.com>
Reviewed-By: Rich Trott <rtrott@gmail.com>
  • Loading branch information
davedoesdev authored and BethGriggs committed Dec 15, 2020
1 parent 1453de1 commit 92bd7b5
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 1 deletion.
4 changes: 3 additions & 1 deletion lib/internal/http2/core.js
Expand Up @@ -167,7 +167,9 @@ function debugStream(id, sessionType, message, ...args) {
}

function debugStreamObj(stream, message, ...args) {
debugStream(stream[kID], stream[kSession][kType], message, ...args);
const session = stream[kSession];
const type = session ? session[kType] : undefined;
debugStream(stream[kID], type, message, ...args);
}

function debugSession(sessionType, message, ...args) {
Expand Down
37 changes: 37 additions & 0 deletions test/parallel/test-http2-destroy-after-write.js
@@ -0,0 +1,37 @@
'use strict';
const common = require('../common');
if (!common.hasCrypto) {
common.skip('missing crypto');
}

const http2 = require('http2');
const assert = require('assert');

const server = http2.createServer();

server.on('session', common.mustCall(function(session) {
session.on('stream', common.mustCall(function(stream) {
stream.on('end', common.mustCall(function() {
this.respond({
':status': 200
});
this.write('foo');
this.destroy();
}));
stream.resume();
}));
}));

server.listen(0, function() {
const client = http2.connect(`http://localhost:${server.address().port}`);
const stream = client.request({ ':method': 'POST' });
stream.on('response', common.mustCall(function(headers) {
assert.strictEqual(headers[':status'], 200);
}));
stream.on('close', common.mustCall(() => {
client.close();
server.close();
}));
stream.resume();
stream.end();
});

0 comments on commit 92bd7b5

Please sign in to comment.