From 41411478e5741567e4a9771e2d923e56f3945686 Mon Sep 17 00:00:00 2001 From: Daniel Bevenius Date: Sat, 6 May 2017 12:33:28 +0200 Subject: [PATCH 1/4] net: check and throw on error for getsockname This commit attempts fix a TODO in net.js: TODO(bnoordhuis) Check err and throw? --- lib/net.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/net.js b/lib/net.js index d50b3729d968a9..0091cd80b2ad11 100644 --- a/lib/net.js +++ b/lib/net.js @@ -1469,8 +1469,10 @@ Object.defineProperty(Server.prototype, 'listening', { Server.prototype.address = function() { if (this._handle && this._handle.getsockname) { var out = {}; - this._handle.getsockname(out); - // TODO(bnoordhuis) Check err and throw? + var err = this._handle.getsockname(out); + if (err) { + throw errnoException(err, 'address'); + } return out; } else if (this._pipeName) { return this._pipeName; From c321986866143821e6470c5a44009f39aca314eb Mon Sep 17 00:00:00 2001 From: Daniel Bevenius Date: Sat, 6 May 2017 17:09:02 +0200 Subject: [PATCH 2/4] add test --- test/parallel/test-socket-address.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 test/parallel/test-socket-address.js diff --git a/test/parallel/test-socket-address.js b/test/parallel/test-socket-address.js new file mode 100644 index 00000000000000..3dc1b13af0d196 --- /dev/null +++ b/test/parallel/test-socket-address.js @@ -0,0 +1,17 @@ +'use strict'; +const common = require('../common'); +const assert = require('assert'); +const net = require('net'); + +// This tests checks that if server._handle.getsockname +// returns an error number, an error is thrown. + +const server = net.createServer({}); +server.listen(0, common.mustCall(function() { + server._handle.getsockname = function(out) { + return -1; + }; + assert.throws(() => this.address(), + /^Error: address EPERM$/); + server.close(); +})); From ecb809c15da3c95e7604249b854f73a01b15db56 Mon Sep 17 00:00:00 2001 From: Daniel Bevenius Date: Sat, 6 May 2017 17:22:20 +0200 Subject: [PATCH 3/4] change regex to avoid plaform specific errors --- test/parallel/test-socket-address.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/parallel/test-socket-address.js b/test/parallel/test-socket-address.js index 3dc1b13af0d196..fdfdd3ce56acf8 100644 --- a/test/parallel/test-socket-address.js +++ b/test/parallel/test-socket-address.js @@ -12,6 +12,6 @@ server.listen(0, common.mustCall(function() { return -1; }; assert.throws(() => this.address(), - /^Error: address EPERM$/); + /^Error: address (\w+)$/); server.close(); })); From 1d1bd1231b6777622c3680a72aa2120997e1f09d Mon Sep 17 00:00:00 2001 From: Daniel Bevenius Date: Sat, 6 May 2017 20:47:23 +0200 Subject: [PATCH 4/4] update regex --- test/parallel/test-socket-address.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/parallel/test-socket-address.js b/test/parallel/test-socket-address.js index fdfdd3ce56acf8..3e05f89f083223 100644 --- a/test/parallel/test-socket-address.js +++ b/test/parallel/test-socket-address.js @@ -12,6 +12,6 @@ server.listen(0, common.mustCall(function() { return -1; }; assert.throws(() => this.address(), - /^Error: address (\w+)$/); + /^Error: address ([\w|\s-\d])+$/); server.close(); }));