aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/internal/errors.js6
-rw-r--r--test/parallel/test-uv-unmapped-exception.js26
2 files changed, 30 insertions, 2 deletions
diff --git a/lib/internal/errors.js b/lib/internal/errors.js
index cf97a76b36..56c7a3bdbe 100644
--- a/lib/internal/errors.js
+++ b/lib/internal/errors.js
@@ -327,6 +327,8 @@ function lazyUv() {
return uvBinding;
}
+const uvUnmappedError = ['UNKNOWN', 'unknown error'];
+
function uvErrmapGet(name) {
uvBinding = lazyUv();
if (!uvBinding.errmap) {
@@ -346,7 +348,7 @@ function uvErrmapGet(name) {
* @returns {Error}
*/
function uvException(ctx) {
- const [ code, uvmsg ] = uvErrmapGet(ctx.errno);
+ const [ code, uvmsg ] = uvErrmapGet(ctx.errno) || uvUnmappedError;
let message = `${code}: ${ctx.message || uvmsg}, ${ctx.syscall}`;
let path;
@@ -404,7 +406,7 @@ function uvException(ctx) {
* @returns {Error}
*/
function uvExceptionWithHostPort(err, syscall, address, port) {
- const [ code, uvmsg ] = uvErrmapGet(err);
+ const [ code, uvmsg ] = uvErrmapGet(err) || uvUnmappedError;
const message = `${syscall} ${code}: ${uvmsg}`;
let details = '';
diff --git a/test/parallel/test-uv-unmapped-exception.js b/test/parallel/test-uv-unmapped-exception.js
new file mode 100644
index 0000000000..0b63461dd2
--- /dev/null
+++ b/test/parallel/test-uv-unmapped-exception.js
@@ -0,0 +1,26 @@
+// Flags: --expose-internals
+'use strict';
+require('../common');
+const assert = require('assert');
+const { uvException, uvExceptionWithHostPort } = require('internal/errors');
+
+{
+ const exception = uvException({ errno: 100, syscall: 'open' });
+
+ assert.strictEqual(exception.message, 'UNKNOWN: unknown error, open');
+ assert.strictEqual(exception.errno, 100);
+ assert.strictEqual(exception.syscall, 'open');
+ assert.strictEqual(exception.code, 'UNKNOWN');
+}
+
+{
+ const exception = uvExceptionWithHostPort(100, 'listen', '127.0.0.1', 80);
+
+ assert.strictEqual(exception.message,
+ 'listen UNKNOWN: unknown error 127.0.0.1:80');
+ assert.strictEqual(exception.code, 'UNKNOWN');
+ assert.strictEqual(exception.errno, 100);
+ assert.strictEqual(exception.syscall, 'listen');
+ assert.strictEqual(exception.address, '127.0.0.1');
+ assert.strictEqual(exception.port, 80);
+}