Skip to content

Commit

Permalink
buffer: Fixing deopt when constructed with strings
Browse files Browse the repository at this point in the history
When a buffer was created using `new Buffer('A String')`, internally
within the buffer class we would read arguments[1], however in this case
we would be reading outside of the array causing a deopt to occur.

This fixes this issue by casting the type to a string before use, and
removing the usage of the arguments object.
  • Loading branch information
tomgco committed Nov 20, 2015
1 parent 7b355c5 commit 58296e4
Showing 1 changed file with 6 additions and 5 deletions.
11 changes: 6 additions & 5 deletions lib/buffer.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ function alignPool() {
}


function Buffer(arg) {
function Buffer(arg, encoding) {
// Common case.
if (typeof arg === 'number') {
// If less than zero, or NaN.
Expand All @@ -51,7 +51,11 @@ function Buffer(arg) {

// Slightly less common case.
if (typeof arg === 'string') {
return fromString(arg, arguments[1]);
encoding = encoding || '';
if (typeof encoding !== 'string' || encoding === '')
encoding = 'utf8';

return fromString(arg, encoding);
}

// Unusual.
Expand Down Expand Up @@ -103,9 +107,6 @@ function allocate(size) {


function fromString(string, encoding) {
if (typeof encoding !== 'string' || encoding === '')
encoding = 'utf8';

var length = byteLength(string, encoding);
if (length >= (Buffer.poolSize >>> 1))
return binding.createFromString(string, encoding);
Expand Down

0 comments on commit 58296e4

Please sign in to comment.