diff --git a/lib/buffer.js b/lib/buffer.js index ee81eac8016..53f484c56dc 100644 --- a/lib/buffer.js +++ b/lib/buffer.js @@ -210,8 +210,12 @@ function Buffer(subject, encoding, offset) { // Are we slicing? if (typeof offset === 'number') { + if (!Buffer.isBuffer(subject)) { + throw new Error('First argument must be a Buffer when slicing'); + } + this.length = coerce(encoding); - this.parent = subject; + this.parent = subject.parent ? subject.parent : subject; this.offset = offset; } else { // Find the length diff --git a/test/simple/test-buffer.js b/test/simple/test-buffer.js index b64a6e5933c..847fbc58421 100644 --- a/test/simple/test-buffer.js +++ b/test/simple/test-buffer.js @@ -724,3 +724,6 @@ var a = Buffer(3); var b = Buffer('xxx'); a.write('aaaaaaaa', 'base64'); assert.equal(b.toString(), 'xxx'); + +// issue GH-3416 +Buffer(Buffer(0), 0, 0);