diff --git a/lib/events.js b/lib/events.js index 73b78b20da554a..38422dab0f395f 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 00000000000000..92d9f8ad011f82 --- /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'); +});