Skip to content

Commit

Permalink
Buffer.copy() should liberally allow empty copies.
Browse files Browse the repository at this point in the history
  • Loading branch information
pgriess authored and ry committed Jul 15, 2010
1 parent b64a521 commit e7c4f8c
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 1 deletion.
5 changes: 5 additions & 0 deletions src/node_buffer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -305,6 +305,11 @@ Handle<Value> Buffer::Copy(const Arguments &args) {
"sourceEnd < sourceStart")));
}

// Copy 0 bytes; we're done
if (source_end == source_start) {
return scope.Close(Integer::New(0));
}

if (target_start < 0 || target_start >= target->length()) {
return ThrowException(Exception::Error(String::New(
"targetStart out of bounds")));
Expand Down
21 changes: 20 additions & 1 deletion test/simple/test-buffer.js
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ assert.strictEqual('sourceStart out of bounds', caught_error.message);
// try to copy starting after the end of b
caught_error = null;
try {
var copied = b.copy(c, 0, 1024, 1024);
var copied = b.copy(c, 0, 1024, 1025);
} catch (err) {
caught_error = err;
}
Expand All @@ -110,6 +110,25 @@ try {
}
assert.strictEqual('sourceEnd out of bounds', caught_error.message);

// try to create 0-length buffers
new Buffer('');
new Buffer('', 'ascii');
new Buffer('', 'binary');
new Buffer(0);

// try to write a 0-length string beyond the end of b
b.write('', 1024);
b.write('', 2048);

// try to copy 0 bytes worth of data into an empty buffer
b.copy(new Buffer(0), 0, 0, 0);

// try to copy 0 bytes past the end of the target buffer
b.copy(new Buffer(0), 1, 1, 1);
b.copy(new Buffer(1), 1, 1, 1);

// try to copy 0 bytes from past the end of the source buffer
b.copy(new Buffer(1), 0, 2048, 2048);

var asciiString = "hello world";
var offset = 100;
Expand Down

0 comments on commit e7c4f8c

Please sign in to comment.