net: add a port validation to `connect`
authorMaciej Małecki <me@mmalecki.com>
Wed, 4 Sep 2013 22:57:43 +0000 (18:57 -0400)
committerBen Noordhuis <info@bnoordhuis.nl>
Thu, 19 Sep 2013 10:38:29 +0000 (12:38 +0200)
Fix "Assertion failed" when trying to connect to non-int ports:

    Assertion failed: (args[2]->Uint32Value()), function Connect,
    file ../src/tcp_wrap.cc, line 379.
    Abort trap: 6

lib/net.js
test/simple/test-net-create-connection.js

index 52f171b..4331a6b 100644 (file)
@@ -794,10 +794,16 @@ function connect(self, address, port, addressType, localAddress) {
   }
 
   var req = { oncomplete: afterConnect };
-  if (addressType == 6) {
-    err = self._handle.connect6(req, address, port);
-  } else if (addressType == 4) {
-    err = self._handle.connect(req, address, port);
+  if (addressType === 6 || addressType === 4) {
+    port = port | 0;
+    if (port <= 0 || port > 65535)
+      throw new RangeError('Port should be > 0 and < 65536');
+
+    if (addressType === 6) {
+      err = self._handle.connect6(req, address, port);
+    } else if (addressType === 4) {
+      err = self._handle.connect(req, address, port);
+    }
   } else {
     err = self._handle.connect(req, address, afterConnect);
   }
index c21be15..12f7f0b 100644 (file)
@@ -42,6 +42,12 @@ server.listen(tcpPort, 'localhost', function() {
   net.createConnection(tcpPort, 'localhost').on('connect', cb);
   net.createConnection(tcpPort, cb);
   net.createConnection(tcpPort, 'localhost', cb);
+
+  assert.throws(function () {
+    net.createConnection({
+      port: 'invalid!'
+    }, cb);
+  });
 });
 
 process.on('exit', function() {