From 738347b90433a38538ab298bf38860e83a4abc53 Mon Sep 17 00:00:00 2001 From: Julian Gruber Date: Fri, 8 Mar 2013 19:41:28 +0100 Subject: [PATCH] events: Handle missing error obj when domains in use so `ee.emit('error')` doesn't throw when domains are active create an empty error only when handled by a domain test for when no error is provided to an error event --- lib/events.js | 1 + ...mitter-no-error-provided-to-error-event.js | 42 +++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 test/simple/test-event-emitter-no-error-provided-to-error-event.js diff --git a/lib/events.js b/lib/events.js index 73b78b20da..38422dab0f 100644 --- a/lib/events.js +++ b/lib/events.js @@ -63,6 +63,7 @@ EventEmitter.prototype.emit = function(type) { !this._events.error.length)) { er = arguments[1]; if (this.domain) { + if (!er) er = new TypeError('Uncaught, unspecified "error" event.'); er.domainEmitter = this; er.domain = this.domain; er.domainThrown = false; diff --git a/test/simple/test-event-emitter-no-error-provided-to-error-event.js b/test/simple/test-event-emitter-no-error-provided-to-error-event.js new file mode 100644 index 0000000000..92d9f8ad01 --- /dev/null +++ b/test/simple/test-event-emitter-no-error-provided-to-error-event.js @@ -0,0 +1,42 @@ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +var common = require('../common'); +var assert = require('assert'); +var events = require('events'); +var domain = require('domain'); + +var errorCatched = false; + +var e = new events.EventEmitter(); + +var d = domain.create(); +d.add(e); +d.on('error', function (er) { + assert(er instanceof TypeError, 'type error created'); + errorCatched = true; +}); + +e.emit('error'); + +process.on('exit', function () { + assert(errorCatched, 'error got catched'); +});