Skip to content
This repository
Browse code

net: Socket write encoding case sensitivity

Fixes #1586.
  • Loading branch information...
commit 55e6be180af998cf2a60f49e87ad7f5ffcffb3c6 1 parent 3e853e6
Koichi Kobayashi authored September 03, 2011
12  lib/net.js
@@ -409,16 +409,10 @@ Socket.prototype._writeOut = function(data, encoding, fd, cb) {
409 409
       allocNewPool();
410 410
     }
411 411
 
412  
-    if (!encoding || encoding == 'utf8' || encoding == 'utf-8') {
413  
-      // default to utf8
414  
-      bytesWritten = pool.write(data, 'utf8', pool.used);
415  
-      charsWritten = Buffer._charsWritten;
416  
-    } else {
417  
-      bytesWritten = pool.write(data, encoding, pool.used);
418  
-      charsWritten = bytesWritten;
419  
-    }
  412
+    bytesWritten = pool.write(data, encoding, pool.used);
  413
+    charsWritten = Buffer._charsWritten;
420 414
 
421  
-    if (encoding && data.length > 0) {
  415
+    if (data.length > 0) {
422 416
       assert(bytesWritten > 0);
423 417
     }
424 418
 
54  test/simple/test-net-large-string.js
... ...
@@ -0,0 +1,54 @@
  1
+// Copyright Joyent, Inc. and other Node contributors.
  2
+//
  3
+// Permission is hereby granted, free of charge, to any person obtaining a
  4
+// copy of this software and associated documentation files (the
  5
+// "Software"), to deal in the Software without restriction, including
  6
+// without limitation the rights to use, copy, modify, merge, publish,
  7
+// distribute, sublicense, and/or sell copies of the Software, and to permit
  8
+// persons to whom the Software is furnished to do so, subject to the
  9
+// following conditions:
  10
+//
  11
+// The above copyright notice and this permission notice shall be included
  12
+// in all copies or substantial portions of the Software.
  13
+//
  14
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  15
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  16
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
  17
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  18
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  19
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  20
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
  21
+
  22
+var common = require('../common');
  23
+var assert = require('assert');
  24
+var net = require('net');
  25
+
  26
+var kPoolSize = 40 * 1024;
  27
+var data = '';
  28
+for (var i = 0; i < kPoolSize; ++i) {
  29
+  data += 'あ'; // 3bytes
  30
+}
  31
+var receivedSize = 0;
  32
+var encoding = 'UTF-8';
  33
+
  34
+var server = net.createServer(function(socket) {
  35
+  socket.setEncoding(encoding);
  36
+  socket.on('data', function(data) {
  37
+    receivedSize += data.length;
  38
+  }).on('end', function() {
  39
+    socket.end();
  40
+  });
  41
+});
  42
+
  43
+server.listen(common.PORT, function() {
  44
+  var client = net.createConnection(common.PORT);
  45
+  client.on('end', function() {
  46
+    server.close();
  47
+  });
  48
+  client.write(data, encoding);
  49
+  client.end();
  50
+});
  51
+
  52
+process.on('exit', function() {
  53
+  assert.equal(receivedSize, kPoolSize);
  54
+});

0 notes on commit 55e6be1

Ben Noordhuis

Make that .on a separate statement (i.e. socket.on(..)), easier to read. LGTM otherwise.

Please sign in to comment.
Something went wrong with that request. Please try again.