Skip to content

Commit

Permalink
tty,doc: add type-check to isatty
Browse files Browse the repository at this point in the history
Previously, various inputs other than non-negative integers would
produce incorrect results.

Added type-checking on input, returning false for anything other than
non-negative integers.

Also clarified in docs.

PR-URL: #15567
Reviewed-By: Luigi Pinca <[email protected]>
Reviewed-By: Ruben Bridgewater <[email protected]>
Reviewed-By: James M Snell <[email protected]>
Reviewed-By: Colin Ihrig <[email protected]>
Reviewed-By: Jeremiah Senkpiel <[email protected]>
  • Loading branch information
bengl committed Oct 22, 2017
1 parent b5569db commit 27e12e7
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 2 deletions.
3 changes: 2 additions & 1 deletion doc/api/tty.md
Original file line number Diff line number Diff line change
Expand Up @@ -123,4 +123,5 @@ added: v0.5.8
* `fd` {number} A numeric file descriptor

The `tty.isatty()` method returns `true` if the given `fd` is associated with
a TTY and `false` if is not.
a TTY and `false` if it is not, including whenever `fd` is not a non-negative
integer.
2 changes: 1 addition & 1 deletion lib/tty.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ const errors = require('internal/errors');
const readline = require('readline');

exports.isatty = function(fd) {
return isTTY(fd);
return Number.isInteger(fd) && fd >= 0 && isTTY(fd);
};


Expand Down
17 changes: 17 additions & 0 deletions test/pseudo-tty/test-tty-isatty.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
'use strict';

require('../common');
const { strictEqual } = require('assert');
const { isatty } = require('tty');

strictEqual(isatty(0), true, 'stdin reported to not be a tty, but it is');
strictEqual(isatty(1), true, 'stdout reported to not be a tty, but it is');
strictEqual(isatty(2), true, 'stderr reported to not be a tty, but it is');

strictEqual(isatty(-1), false, '-1 reported to be a tty, but it is not');
strictEqual(isatty(55555), false, '55555 reported to be a tty, but it is not');
strictEqual(isatty(1.1), false, '1.1 reported to be a tty, but it is not');
strictEqual(isatty('1'), false, '\'1\' reported to be a tty, but it is not');
strictEqual(isatty({}), false, '{} reported to be a tty, but it is not');
strictEqual(isatty(() => {}), false,
'() => {} reported to be a tty, but it is not');
Empty file.

0 comments on commit 27e12e7

Please sign in to comment.