buffer: zero-length buffers shouldn't be slab-backed

pull/24504/head
Bert Belder 2013-01-05 22:14:50 +01:00
parent 4dd70bb12c
commit e501ce4b21
1 changed files with 8 additions and 2 deletions

View File

@ -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.