Browse Source

http2: fix closedCode NaN, increase test coverage

[kFinish](code) can be triggered from a 'finish' event (for example
when calling response.end) which does not pass code. That tries to
set closedCode to undefined resulting in NaN closedCode instead of
NGHTTP2_NO_ERROR. Check for code !== undefined before setting.
Adds tests for closed and closedCode.

PR-URL: https://github.com/nodejs/node/pull/15154
Reviewed-By: Timothy Gu <timothygu99@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
canary-base
Anatoli Papirovski 8 years ago
committed by James M Snell
parent
commit
800c32d315
  1. 6
      lib/internal/http2/compat.js
  2. 5
      test/parallel/test-http2-compat-serverrequest.js
  3. 3
      test/parallel/test-http2-compat-serverresponse-headers.js

6
lib/internal/http2/compat.js

@ -249,7 +249,8 @@ class Http2ServerRequest extends Readable {
const state = this[kState];
if (state.closed)
return;
state.closedCode = code;
if (code !== undefined)
state.closedCode = code;
state.closed = true;
this.push(null);
this[kStream] = undefined;
@ -522,7 +523,8 @@ class Http2ServerResponse extends Stream {
const state = this[kState];
if (state.closed)
return;
state.closedCode = code;
if (code !== undefined)
state.closedCode = code;
state.closed = true;
this.end();
this[kStream] = undefined;

5
test/parallel/test-http2-compat-serverrequest.js

@ -21,6 +21,9 @@ server.listen(0, common.mustCall(function() {
httpVersionMinor: 0
};
assert.strictEqual(request.closed, false);
assert.strictEqual(request.code, h2.constants.NGHTTP2_NO_ERROR);
assert.strictEqual(request.statusCode, expected.statusCode);
assert.strictEqual(request.httpVersion, expected.version);
assert.strictEqual(request.httpVersionMajor, expected.httpVersionMajor);
@ -31,6 +34,8 @@ server.listen(0, common.mustCall(function() {
assert.strictEqual(request.socket, request.connection);
response.on('finish', common.mustCall(function() {
assert.strictEqual(request.closed, true);
assert.strictEqual(request.code, h2.constants.NGHTTP2_NO_ERROR);
server.close();
}));
response.end();

3
test/parallel/test-http2-compat-serverresponse-headers.js

@ -84,7 +84,10 @@ server.listen(0, common.mustCall(function() {
response.sendDate = false;
assert.strictEqual(response.sendDate, false);
assert.strictEqual(response.code, h2.constants.NGHTTP2_NO_ERROR);
response.on('finish', common.mustCall(function() {
assert.strictEqual(response.code, h2.constants.NGHTTP2_NO_ERROR);
server.close();
}));
response.end();

Loading…
Cancel
Save