From 57d53a47e86c310f99e991ea0afb4a3790a54751 Mon Sep 17 00:00:00 2001 From: Karl Skomski Date: Mon, 18 Jun 2012 11:03:32 +0200 Subject: [PATCH] Use parent SlowBuffer, if any, when Buffer is sliced Closes #3416 Closes #3477 --- lib/buffer.js | 6 +++++- test/simple/test-buffer.js | 3 +++ 2 files changed, 8 insertions(+), 1 deletion(-) 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);