diff --git a/lib/fs.js b/lib/fs.js index 6826f5557a1c83..9828b3099cf668 100644 --- 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 index 00000000000000..1320acca2c1b4c --- /dev/null +++ b/test/parallel/test-fs-write-string-coerce.js @@ -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); +});