summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBert Belder <bertbelder@gmail.com>2013-01-05 22:14:50 +0100
committerBert Belder <bertbelder@gmail.com>2013-01-14 22:20:03 +0100
commita6b8f63660c3f5ee50b2625f7a86f03fbe45ec12 (patch)
tree199b9cc2692f7d61d8428f3f0383a3a8da9b0fe5
parent45024e7b7551eca7796e16fe453b2cbaee94b916 (diff)
downloadnode-a6b8f63660c3f5ee50b2625f7a86f03fbe45ec12.tar.gz
buffer: zero-length buffers shouldn't be slab-backed
-rw-r--r--lib/buffer.js10
1 files changed, 8 insertions, 2 deletions
diff --git a/lib/buffer.js b/lib/buffer.js
index 91a6326b9..ca53ab951 100644
--- a/lib/buffer.js
+++ b/lib/buffer.js
@@ -199,8 +199,9 @@ function coerce(length) {
}
-// Buffer
+var zeroBuffer = new SlowBuffer(0);
+// Buffer
function Buffer(subject, encoding, offset) {
if (!(this instanceof Buffer)) {
return new Buffer(subject, encoding, offset);
@@ -242,13 +243,18 @@ function Buffer(subject, encoding, offset) {
this.parent = new SlowBuffer(this.length);
this.offset = 0;
- } else {
+ } else if (this.length > 0) {
// Small buffer.
if (!pool || pool.length - pool.used < this.length) allocPool();
this.parent = pool;
this.offset = pool.used;
pool.used += this.length;
if (pool.used & 7) pool.used = (pool.used + 8) & ~7;
+
+ } else {
+ // Zero-length buffer
+ this.parent = zeroBuffer;
+ this.offset = 0;
}
// Treat array-ish objects as a byte array.