Browse Source

process: support symbol events

Event emitters support symbols as event names. The process object
assumes that the event name is a string, and examines the first
three characters to check for signals. This causes an exception
if the event name is a symbol. This commit ensures that the
event name is a string before trying to slice() it.

PR-URL: https://github.com/nodejs/node/pull/4798
Reviewed-By: Sam Roberts <vieuxtech@gmail.com>
Reviewed-By: Michaël Zasso <mic.besace@gmail.com>
Reviewed-By: Wyatt Preul <wpreul@gmail.com>
v5.x
cjihrig 9 years ago
committed by Rod Vagg
parent
commit
5a77c095a6
  1. 3
      src/node.js
  2. 20
      test/parallel/test-process-emit.js

3
src/node.js

@ -819,7 +819,8 @@
var signalWraps = {};
function isSignal(event) {
return event.slice(0, 3) === 'SIG' &&
return typeof event === 'string' &&
event.slice(0, 3) === 'SIG' &&
startup.lazyConstants().hasOwnProperty(event);
}

20
test/parallel/test-process-emit.js

@ -0,0 +1,20 @@
'use strict';
const common = require('../common');
const assert = require('assert');
const sym = Symbol();
process.on('normal', common.mustCall(data => {
assert.strictEqual(data, 'normalData');
}));
process.on(sym, common.mustCall(data => {
assert.strictEqual(data, 'symbolData');
}));
process.on('SIGPIPE', common.mustCall(data => {
assert.strictEqual(data, 'signalData');
}));
process.emit('normal', 'normalData');
process.emit(sym, 'symbolData');
process.emit('SIGPIPE', 'signalData');
Loading…
Cancel
Save