fs: fix .write() not coercing non-string values
authorJeremiah Senkpiel <fishrock123@rocketmail.com>
Sun, 8 Mar 2015 20:19:56 +0000 (16:19 -0400)
committerBrendan Ashworth <brendan.ashworth@me.com>
Sun, 8 Mar 2015 21:42:09 +0000 (14:42 -0700)
Fixes: https://github.com/iojs/io.js/issues/1098
PR-URL: https://github.com/iojs/io.js/pull/1102
Reviewed-By: Brendan Ashworth <brendan.ashworth@me.com>
lib/fs.js
test/parallel/test-fs-write-string-coerce.js [new file with mode: 0644]

index 6826f55..9828b30 100644 (file)
--- a/lib/fs.js
+++ b/lib/fs.js
@@ -629,7 +629,7 @@ fs.write = function(fd, buffer, offset, length, position, callback) {
     return binding.writeBuffer(fd, buffer, offset, length, position, req);
   }
 
-  if (typeof buffer === 'string')
+  if (typeof buffer !== 'string')
     buffer += '';
   if (typeof position !== 'function') {
     if (typeof offset === 'function') {
diff --git a/test/parallel/test-fs-write-string-coerce.js b/test/parallel/test-fs-write-string-coerce.js
new file mode 100644 (file)
index 0000000..1320acc
--- /dev/null
@@ -0,0 +1,29 @@
+var common = require('../common');
+var assert = require('assert');
+var path = require('path');
+var Buffer = require('buffer').Buffer;
+var fs = require('fs');
+var fn = path.join(common.tmpDir, 'write-string-coerce.txt');
+var data = true;
+var expected = data + '';
+var found;
+
+fs.open(fn, 'w', 0644, function(err, fd) {
+  if (err) throw err;
+  console.log('open done');
+  fs.write(fd, data, 0, 'utf8', function(err, written) {
+    console.log('write done');
+    if (err) throw err;
+    assert.equal(Buffer.byteLength(expected), written);
+    fs.closeSync(fd);
+    found = fs.readFileSync(fn, 'utf8');
+    console.log('expected: "%s"', expected);
+    console.log('found: "%s"', found);
+    fs.unlinkSync(fn);
+  });
+});
+
+
+process.on('exit', function() {
+  assert.equal(expected, found);
+});