diff options
author | Bert Belder <bertbelder@gmail.com> | 2013-01-05 22:14:50 +0100 |
---|---|---|
committer | Bert Belder <bertbelder@gmail.com> | 2013-01-14 22:20:03 +0100 |
commit | a6b8f63660c3f5ee50b2625f7a86f03fbe45ec12 (patch) | |
tree | 199b9cc2692f7d61d8428f3f0383a3a8da9b0fe5 | |
parent | 45024e7b7551eca7796e16fe453b2cbaee94b916 (diff) | |
download | node-a6b8f63660c3f5ee50b2625f7a86f03fbe45ec12.tar.gz |
buffer: zero-length buffers shouldn't be slab-backed
-rw-r--r-- | lib/buffer.js | 10 |
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. |