mirror of
https://github.com/nodejs/node.git
synced 2024-12-01 16:10:02 +01:00
timers: be more defensive with intervals
It's possible for user-code to flip an existing timeout to be an interval during its execution, in which case the current code would crash due to start being undefined. Fix this by providing a default start value within rearm. PR-URL: https://github.com/nodejs/node/pull/18579 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
This commit is contained in:
parent
1b05d7bc86
commit
568b6a5c9e
@ -442,8 +442,7 @@ function ontimeout(timer, start) {
|
||||
rearm(timer, start);
|
||||
}
|
||||
|
||||
|
||||
function rearm(timer, start) {
|
||||
function rearm(timer, start = TimerWrap.now()) {
|
||||
// // Do not re-arm unenroll'd or closed timers.
|
||||
if (timer._idleTimeout === -1) return;
|
||||
|
||||
|
12
test/parallel/test-timers-timeout-to-interval.js
Normal file
12
test/parallel/test-timers-timeout-to-interval.js
Normal file
@ -0,0 +1,12 @@
|
||||
'use strict';
|
||||
const common = require('../common');
|
||||
|
||||
// This isn't officially supported but nonetheless is something that is
|
||||
// currently possible and as such it shouldn't cause the process to crash
|
||||
|
||||
const t = setTimeout(common.mustCall(() => {
|
||||
if (t._repeat) {
|
||||
clearInterval(t);
|
||||
}
|
||||
t._repeat = true;
|
||||
}, 2), 1);
|
Loading…
Reference in New Issue
Block a user