mirror of https://github.com/lukechilds/node.git
Browse Source
In shutdown(), shuttingDown was set to true before validating options. If invalid options are passed, error was thrown and server remained in shuttingDown state. This code change fixes it. PR-URL: https://github.com/nodejs/node/pull/15676 Fixes: https://github.com/nodejs/node/issues/15666 Refs: https://github.com/nodejs/node/issues/14985 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>v9.x-staging
committed by
Ruben Bridgewater
2 changed files with 64 additions and 3 deletions
@ -0,0 +1,61 @@ |
|||
'use strict'; |
|||
|
|||
const common = require('../common'); |
|||
if (!common.hasCrypto) |
|||
common.skip('missing crypto'); |
|||
const http2 = require('http2'); |
|||
|
|||
const server = http2.createServer(); |
|||
|
|||
const optionsToTest = { |
|||
opaqueData: 'Uint8Array', |
|||
graceful: 'boolean', |
|||
errorCode: 'number', |
|||
lastStreamID: 'number' |
|||
}; |
|||
|
|||
const types = { |
|||
boolean: true, |
|||
number: 1, |
|||
object: {}, |
|||
array: [], |
|||
null: null, |
|||
Uint8Array: Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5]) |
|||
}; |
|||
|
|||
server.on( |
|||
'stream', |
|||
common.mustCall((stream) => { |
|||
Object.keys(optionsToTest).forEach((option) => { |
|||
Object.keys(types).forEach((type) => { |
|||
if (type === optionsToTest[option]) { |
|||
return; |
|||
} |
|||
common.expectsError( |
|||
() => |
|||
stream.session.shutdown( |
|||
{ [option]: types[type] }, |
|||
common.mustNotCall() |
|||
), |
|||
{ |
|||
type: TypeError, |
|||
code: 'ERR_INVALID_OPT_VALUE', |
|||
message: `The value "${String(types[type])}" is invalid ` + |
|||
`for option "${option}"` |
|||
} |
|||
); |
|||
}); |
|||
}); |
|||
stream.session.destroy(); |
|||
}) |
|||
); |
|||
|
|||
server.listen( |
|||
0, |
|||
common.mustCall(() => { |
|||
const client = http2.connect(`http://localhost:${server.address().port}`); |
|||
const req = client.request(); |
|||
req.resume(); |
|||
req.on('end', common.mustCall(() => server.close())); |
|||
}) |
|||
); |
Loading…
Reference in new issue