0
0
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:
Anatoli Papirovski 2018-02-05 09:50:18 -05:00
parent 1b05d7bc86
commit 568b6a5c9e
No known key found for this signature in database
GPG Key ID: 614E2E1ABEB4B2C0
2 changed files with 13 additions and 2 deletions

View File

@ -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;

View 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);