From e371545dfe3ec6dbe52a68d0cabc041770e88b5f Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Thu, 18 Aug 2016 03:58:38 +0200 Subject: [PATCH] buffer: allow .write() offset to be at buffer end MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Do not throw if the offset passed to `buf.write()` points to the end of the buffer. Fixes: https://github.com/nodejs/node/issues/8127 PR-URL: https://github.com/nodejs/node/pull/8154 Reviewed-By: James M Snell Reviewed-By: Colin Ihrig Reviewed-By: Michaƫl Zasso --- src/node_buffer.cc | 2 +- test/parallel/test-buffer-alloc.js | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/node_buffer.cc b/src/node_buffer.cc index e685e4d119582d..cedcbafe972c56 100644 --- a/src/node_buffer.cc +++ b/src/node_buffer.cc @@ -714,7 +714,7 @@ void StringWrite(const FunctionCallbackInfo& args) { size_t max_length; CHECK_NOT_OOB(ParseArrayIndex(args[1], 0, &offset)); - if (offset >= ts_obj_length) + if (offset > ts_obj_length) return env->ThrowRangeError("Offset is out of bounds"); CHECK_NOT_OOB(ParseArrayIndex(args[2], ts_obj_length - offset, &max_length)); diff --git a/test/parallel/test-buffer-alloc.js b/test/parallel/test-buffer-alloc.js index 76a34319c17278..24072a9a49c8bc 100644 --- a/test/parallel/test-buffer-alloc.js +++ b/test/parallel/test-buffer-alloc.js @@ -358,6 +358,12 @@ writeTest.write('e', 3, 'ascii'); writeTest.write('j', 4, 'ascii'); assert.equal(writeTest.toString(), 'nodejs'); +// Offset points to the end of the buffer +// (see https://github.com/nodejs/node/issues/8127). +assert.doesNotThrow(() => { + Buffer.alloc(1).write('', 1, 0); +}); + // ASCII slice test { const asciiString = 'hello world';