diff --git a/lib/readline.js b/lib/readline.js index d2fd9924b0e6b4..352b7ed64f06ba 100644 --- a/lib/readline.js +++ b/lib/readline.js @@ -1236,6 +1236,11 @@ function cursorTo(stream, x, y, callback) { y = undefined; } + if (NumberIsNaN(x)) + throw new ERR_INVALID_ARG_VALUE('x', x); + if (NumberIsNaN(y)) + throw new ERR_INVALID_ARG_VALUE('y', y); + if (stream == null || (typeof x !== 'number' && typeof y !== 'number')) { if (typeof callback === 'function') process.nextTick(callback, null); diff --git a/test/parallel/test-readline-csi.js b/test/parallel/test-readline-csi.js index 5c0080d3d41910..13dbbfa30f6fa2 100644 --- a/test/parallel/test-readline-csi.js +++ b/test/parallel/test-readline-csi.js @@ -161,3 +161,16 @@ assert.strictEqual(writable.data, '\x1b[2G'); assert.throws(() => { readline.cursorTo(writable, 1, 1, null); }, /ERR_INVALID_CALLBACK/); + +// Verify that cursorTo() throws if x or y is NaN. +assert.throws(() => { + readline.cursorTo(writable, NaN); +}, /ERR_INVALID_ARG_VALUE/); + +assert.throws(() => { + readline.cursorTo(writable, 1, NaN); +}, /ERR_INVALID_ARG_VALUE/); + +assert.throws(() => { + readline.cursorTo(writable, NaN, NaN); +}, /ERR_INVALID_ARG_VALUE/);