Compare commits

...

1 Commits

Author SHA1 Message Date
Ashcon Partovi
0cc222ce9b fix: test-http-timeout-overflow.js 2025-03-21 14:38:24 -07:00
2 changed files with 75 additions and 0 deletions

View File

@@ -187,6 +187,16 @@ function validateMsecs(numberlike: any, field: string) {
throw $ERR_INVALID_ARG_TYPE(field, "number", numberlike);
}
// Ensure that msecs fits into signed int32
const TIMEOUT_MAX = 2 ** 31 - 1;
if (numberlike > TIMEOUT_MAX) {
process.emitWarning(
`${numberlike} does not fit into a 32-bit signed integer.` + `\nTimer duration was truncated to ${TIMEOUT_MAX}.`,
"TimeoutOverflowWarning"
);
return TIMEOUT_MAX;
}
return numberlike;
}
@@ -3227,6 +3237,20 @@ const ClientRequestPrototype = {
constructor: ClientRequest,
__proto__: OutgoingMessage.prototype,
clearTimeout(callback) {
const timeoutTimer = this[kTimeoutTimer];
if (timeoutTimer) {
clearTimeout(timeoutTimer);
this[kTimeoutTimer] = undefined;
if (callback) {
this.removeListener("timeout", callback);
} else {
this.removeAllListeners("timeout");
}
}
return this;
},
get path() {
return this[kPath];
},

View File

@@ -0,0 +1,51 @@
// Copyright Joyent, Inc. and other Node contributors.
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to permit
// persons to whom the Software is furnished to do so, subject to the
// following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
// USE OR OTHER DEALINGS IN THE SOFTWARE.
'use strict';
const common = require('../common');
const http = require('http');
const server = http.createServer(common.mustCall(function(req, res) {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('OK');
}));
server.listen(0, function() {
function callback() {}
const req = http.request({
port: this.address().port,
path: '/',
agent: false
}, function(res) {
req.clearTimeout(callback);
res.on('end', common.mustCall(function() {
server.close();
}));
res.resume();
});
// Overflow signed int32
req.setTimeout(0xffffffff, callback);
req.end();
});