From 91eec00ca20a54b1dc010cfc2fb34bc2f39eab6b Mon Sep 17 00:00:00 2001 From: Matteo Collina Date: Tue, 3 Jul 2018 18:35:59 +0200 Subject: tty: make _read throw ERR_TTY_WRITABLE_NOT_READABLE This change avoid an 'read ENOTCONN' error introduced by libuv 1.20.0 when trying to read from a TTY WriteStream. Instead, we are throwing a more actionable ERR_TTY_WRITABLE_NOT_READABLE. Fixes: https://github.com/nodejs/node/issues/21203 PR-URL: https://github.com/nodejs/node/pull/21654 Reviewed-By: Ruben Bridgewater Reviewed-By: Colin Ihrig Reviewed-By: Shingo Inoue Reviewed-By: James M Snell --- lib/tty.js | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'lib/tty.js') diff --git a/lib/tty.js b/lib/tty.js index b36adf2534..5e0e528c7e 100644 --- a/lib/tty.js +++ b/lib/tty.js @@ -25,7 +25,11 @@ const { inherits, _extend } = require('util'); const net = require('net'); const { TTY, isTTY } = process.binding('tty_wrap'); const errors = require('internal/errors'); -const { ERR_INVALID_FD, ERR_TTY_INIT_FAILED } = errors.codes; +const { + ERR_INVALID_FD, + ERR_TTY_INIT_FAILED, + ERR_TTY_WRITABLE_NOT_READABLE +} = errors.codes; const { getColorDepth } = require('internal/tty'); // Lazy loaded for startup performance. @@ -122,6 +126,13 @@ WriteStream.prototype._refreshSize = function() { } }; +// A WriteStream is not readable from, so _read become a no-op. +// this method could still be called because net.Socket() +// is a duplex +WriteStream.prototype._read = function() { + this.destroy(new ERR_TTY_WRITABLE_NOT_READABLE()); +}; + // Backwards-compat WriteStream.prototype.cursorTo = function(x, y) { if (readline === undefined) readline = require('readline'); -- cgit v1.2.3