Fix bug in buffer.utf8Write() which included \u0000

This commit is contained in:
Ryan Dahl 2010-04-05 17:54:48 -07:00
parent 4befe93a4b
commit 53dd9fe200
3 changed files with 13 additions and 2 deletions

View File

@ -453,8 +453,6 @@ Stream.prototype._writeOut = function (data, encoding) {
} else {
// default to utf8
bytesWritten = pool.utf8Write(data, pool.used);
// Don't include the null
if (pool[pool.used + bytesWritten-1] == 0) bytesWritten--;
// XXX Hacky way to find out the number of characters written.
// Waiting for a more optimal way: http://codereview.chromium.org/1539013
var _s = pool.utf8Slice(pool.used, pool.used + bytesWritten);

View File

@ -310,6 +310,8 @@ Handle<Value> Buffer::Utf8Write(const Arguments &args) {
int written = s->WriteUtf8((char*)p, buffer->length_ - offset);
if (written > 0 && p[written-1] == '\0') written--;
return scope.Close(Integer::New(written));
}

View File

@ -84,3 +84,14 @@ b[6] = 0xBE;
b[7] = 0xEF;
assert.deepEqual([0xDEADBEEF], b.unpack('N', 4));
// Bug regression test
var testValue = '\u00F6\u65E5\u672C\u8A9E'; // ö日本語
var buffer = new Buffer(32);
var size = buffer.utf8Write(testValue, 0);
puts('bytes written to buffer: ' + size);
var slice = buffer.utf8Slice(0, size);
assert.equal(slice, testValue);