diff options
author | isaacs <i@izs.me> | 2013-01-17 13:20:22 -0800 |
---|---|---|
committer | isaacs <i@izs.me> | 2013-01-17 13:20:22 -0800 |
commit | b7d76a1a7ba441ffb5dd0da05a226295f7a3a17c (patch) | |
tree | 5283c777764714649147b0a62293a08fcd47b9ea /lib/events.js | |
parent | 1528de23735d752f397371db9cc668aec0e67d36 (diff) | |
download | node-b7d76a1a7ba441ffb5dd0da05a226295f7a3a17c.tar.gz |
Revert "events: Don't crash on events named __proto__"
Unfortunately, it's just too slow to do this in events.js. Users will
just have to live with not having events named __proto__ or toString.
This reverts commit b48e303af023dc60b6f6590694ba94d9b8108702.
Diffstat (limited to 'lib/events.js')
-rw-r--r-- | lib/events.js | 67 |
1 files changed, 31 insertions, 36 deletions
diff --git a/lib/events.js b/lib/events.js index 5093f4ef1..223015ec6 100644 --- a/lib/events.js +++ b/lib/events.js @@ -53,8 +53,8 @@ var PROCESS; EventEmitter.prototype.emit = function(type) { // If there is no 'error' event listener then throw. if (type === 'error') { - if (!this._events || !this._events.everror || - (isArray(this._events.everror) && !this._events.everror.length)) + if (!this._events || !this._events.error || + (isArray(this._events.error) && !this._events.error.length)) { if (this.domain) { var er = arguments[1]; @@ -75,8 +75,7 @@ EventEmitter.prototype.emit = function(type) { } if (!this._events) return false; - var evtype = 'ev' + type; - var handler = this._events[evtype]; + var handler = this._events[type]; if (!handler) return false; if (typeof handler == 'function') { @@ -143,37 +142,36 @@ EventEmitter.prototype.addListener = function(type, listener) { // To avoid recursion in the case that type == "newListener"! Before // adding it to the listeners, first emit "newListener". - if (this._events.evnewListener) { + if (this._events.newListener) { this.emit('newListener', type, typeof listener.listener === 'function' ? listener.listener : listener); } - var evtype = 'ev' + type; - if (!this._events[evtype]) { + if (!this._events[type]) { // Optimize the case of one listener. Don't need the extra array object. - this._events[evtype] = listener; - } else if (isArray(this._events[evtype])) { + this._events[type] = listener; + } else if (isArray(this._events[type])) { // If we've already got an array, just append. - this._events[evtype].push(listener); + this._events[type].push(listener); } else { // Adding the second element, need to change to array. - this._events[evtype] = [this._events[evtype], listener]; + this._events[type] = [this._events[type], listener]; } // Check for listener leak - if (isArray(this._events[evtype]) && !this._events[evtype].warned) { + if (isArray(this._events[type]) && !this._events[type].warned) { var m; m = this._maxListeners; - if (m && m > 0 && this._events[evtype].length > m) { - this._events[evtype].warned = true; + if (m && m > 0 && this._events[type].length > m) { + this._events[type].warned = true; console.error('(node) warning: possible EventEmitter memory ' + 'leak detected. %d listeners added. ' + 'Use emitter.setMaxListeners() to increase limit.', - this._events[evtype].length); + this._events[type].length); console.trace(); } } @@ -206,11 +204,10 @@ EventEmitter.prototype.removeListener = function(type, listener) { throw new Error('removeListener only takes instances of Function'); } - var evtype = 'ev' + type; - // does not use listeners(), so no side effect of creating _events[evtype] - if (!this._events || !this._events[evtype]) return this; + // does not use listeners(), so no side effect of creating _events[type] + if (!this._events || !this._events[type]) return this; - var list = this._events[evtype]; + var list = this._events[type]; if (isArray(list)) { var position = -1; @@ -226,17 +223,17 @@ EventEmitter.prototype.removeListener = function(type, listener) { if (position < 0) return this; list.splice(position, 1); if (list.length == 0) - this._events[evtype] = null; + this._events[type] = null; - if (this._events.evremoveListener) { + if (this._events.removeListener) { this.emit('removeListener', type, listener); } } else if (list === listener || (list.listener && list.listener === listener)) { - this._events[evtype] = null; + this._events[type] = null; - if (this._events.evremoveListener) { + if (this._events.removeListener) { this.emit('removeListener', type, listener); } } @@ -248,11 +245,11 @@ EventEmitter.prototype.removeAllListeners = function(type) { if (!this._events) return this; // fast path - if (!this._events.evremoveListener) { + if (!this._events.removeListener) { if (arguments.length === 0) { this._events = {}; - } else if (type && this._events && this._events['ev' + type]) { - this._events['ev' + type] = null; + } else if (type && this._events && this._events[type]) { + this._events[type] = null; } return this; } @@ -260,16 +257,15 @@ EventEmitter.prototype.removeAllListeners = function(type) { // slow(ish) path, emit 'removeListener' events for all removals if (arguments.length === 0) { for (var key in this._events) { - if (key === 'evremoveListener') continue; - this.removeAllListeners(key.slice(2)); + if (key === 'removeListener') continue; + this.removeAllListeners(key); } this.removeAllListeners('removeListener'); this._events = {}; return this; } - var evtype = 'ev' + type; - var listeners = this._events[evtype]; + var listeners = this._events[type]; if (isArray(listeners)) { while (listeners.length) { // LIFO order @@ -278,16 +274,15 @@ EventEmitter.prototype.removeAllListeners = function(type) { } else if (listeners) { this.removeListener(type, listeners); } - this._events[evtype] = null; + this._events[type] = null; return this; }; EventEmitter.prototype.listeners = function(type) { - var evtype = 'ev' + type; - if (!this._events || !this._events[evtype]) return []; - if (!isArray(this._events[evtype])) { - return [this._events[evtype]]; + if (!this._events || !this._events[type]) return []; + if (!isArray(this._events[type])) { + return [this._events[type]]; } - return this._events[evtype].slice(0); + return this._events[type].slice(0); }; |