From: koichik Date: Wed, 13 Apr 2011 16:17:18 +0000 (+0900) Subject: Fix Buffer.write() with UCS-2 should not be write partial char X-Git-Tag: v0.4.6~8 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9533e879f0d3cfaf5de90825813237b330e64ee5;p=platform%2Fupstream%2Fnodejs.git Fix Buffer.write() with UCS-2 should not be write partial char closes #916. --- diff --git a/src/node_buffer.cc b/src/node_buffer.cc index b46abe1..75bac2a 100644 --- a/src/node_buffer.cc +++ b/src/node_buffer.cc @@ -495,7 +495,7 @@ Handle Buffer::Ucs2Write(const Arguments &args) { size_t max_length = args[2]->IsUndefined() ? buffer->length_ - offset : args[2]->Uint32Value(); - max_length = MIN(buffer->length_ - offset, max_length); + max_length = MIN(buffer->length_ - offset, max_length) / 2; uint16_t* p = (uint16_t*)(buffer->data_ + offset); @@ -503,6 +503,10 @@ Handle Buffer::Ucs2Write(const Arguments &args) { 0, max_length, String::HINT_MANY_WRITES_EXPECTED); + + constructor_template->GetFunction()->Set(chars_written_sym, + Integer::New(written)); + return scope.Close(Integer::New(written * 2)); } diff --git a/test/simple/test-buffer.js b/test/simple/test-buffer.js index ac822b2..0edb642 100644 --- a/test/simple/test-buffer.js +++ b/test/simple/test-buffer.js @@ -256,6 +256,15 @@ console.error('f.length: %d (should be 12)', f.length); assert.deepEqual(f, new Buffer([63, 4, 64, 4, 56, 4, 50, 4, 53, 4, 66, 4])); assert.equal(f.toString('ucs2'), 'привет'); +var f = new Buffer([0, 0, 0, 0, 0]); +assert.equal(f.length, 5); +var size = f.write('あいうえお', 'ucs2'); +console.error('bytes written to buffer: %d (should be 4)', size); +console.error('chars written to buffer: %d (should be 2)', Buffer._charsWritten); +assert.equal(size, 4); +assert.equal(Buffer._charsWritten, 2); +assert.deepEqual(f, new Buffer([0x42, 0x30, 0x44, 0x30, 0x00])); + var arrayIsh = {0: 0, 1: 1, 2: 2, 3: 3, length: 4}; var g = new Buffer(arrayIsh);