Buffer.copy() should liberally allow empty copies.

This commit is contained in:
Peter Griess 2010-07-15 08:52:15 -05:00 committed by Ryan Dahl
parent b64a521d66
commit e7c4f8cdaa
2 changed files with 25 additions and 1 deletions

View File

@ -305,6 +305,11 @@ Handle<Value> Buffer::Copy(const Arguments &args) {
"sourceEnd < sourceStart"))); "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()) { if (target_start < 0 || target_start >= target->length()) {
return ThrowException(Exception::Error(String::New( return ThrowException(Exception::Error(String::New(
"targetStart out of bounds"))); "targetStart out of bounds")));

View File

@ -94,7 +94,7 @@ assert.strictEqual('sourceStart out of bounds', caught_error.message);
// try to copy starting after the end of b // try to copy starting after the end of b
caught_error = null; caught_error = null;
try { try {
var copied = b.copy(c, 0, 1024, 1024); var copied = b.copy(c, 0, 1024, 1025);
} catch (err) { } catch (err) {
caught_error = err; caught_error = err;
} }
@ -110,6 +110,25 @@ try {
} }
assert.strictEqual('sourceEnd out of bounds', caught_error.message); 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 asciiString = "hello world";
var offset = 100; var offset = 100;