diff --git a/lib/timers.js b/lib/timers.js index 8884137a80..5a5e89f0bb 100644 --- a/lib/timers.js +++ b/lib/timers.js @@ -301,7 +301,7 @@ ObjectDefineProperty(setImmediate, customPromisify, { * @returns {void} */ function clearImmediate(immediate) { - if (!immediate || immediate._destroyed) + if (!immediate?._onImmediate || immediate._destroyed) return; immediateInfo[kCount]--; diff --git a/test/parallel/test-timers-invalid-clear.js b/test/parallel/test-timers-invalid-clear.js new file mode 100644 index 0000000000..b7d046794c --- /dev/null +++ b/test/parallel/test-timers-invalid-clear.js @@ -0,0 +1,13 @@ +'use strict'; + +const common = require('../common'); + +// clearImmediate should be a noop if anything other than an Immediate +// is passed to it. + +const t = setTimeout(common.mustCall()); + +clearImmediate(t); + +setTimeout(common.mustCall()); +setTimeout(common.mustCall());