child_process: fix O(n*m) scan of cmd string
authorBen Noordhuis <info@bnoordhuis.nl>
Thu, 11 Apr 2013 11:50:45 +0000 (13:50 +0200)
committerBen Noordhuis <info@bnoordhuis.nl>
Thu, 11 Apr 2013 11:53:18 +0000 (13:53 +0200)
Don't scan the whole string for a "NODE_" substring, just check that
the string starts with the expected prefix.

This is a reprise of dbbfbe7 but this time for the child_process
module.

lib/child_process.js

index e4fe26ecda7cb0907e532dd7a3518a895b9078d5..1b6b8b21d6254e69905cf89dc4e2e5fb234b9773 100644 (file)
@@ -305,19 +305,17 @@ function getSocketList(type, slave, key) {
   return socketList;
 }
 
+var INTERNAL_PREFIX = 'NODE_';
 function handleMessage(target, message, handle) {
-  //Filter out internal messages
-  //if cmd property begin with "_NODE"
+  var eventName = 'message';
   if (message !== null &&
       typeof message === 'object' &&
       typeof message.cmd === 'string' &&
-      message.cmd.indexOf('NODE_') === 0) {
-    target.emit('internalMessage', message, handle);
-  }
-  //Non-internal message
-  else {
-    target.emit('message', message, handle);
+      message.cmd.length > INTERNAL_PREFIX.length &&
+      message.cmd.slice(0, INTERNAL_PREFIX.length) === INTERNAL_PREFIX) {
+    eventName = 'internalMessage';
   }
+  target.emit(eventName, message, handle);
 }
 
 function setupChannel(target, channel) {