diff --git a/src/node_buffer.cc b/src/node_buffer.cc index 75bac2a2808..33870c3757a 100644 --- a/src/node_buffer.cc +++ b/src/node_buffer.cc @@ -679,6 +679,11 @@ Handle Buffer::ByteLength(const Arguments &args) { Handle Buffer::MakeFastBuffer(const Arguments &args) { HandleScope scope; + if (!Buffer::HasInstance(args[0])) { + return ThrowException(Exception::TypeError(String::New( + "First argument must be a Buffer"))); + } + Buffer *buffer = ObjectWrap::Unwrap(args[0]->ToObject()); Local fast_buffer = args[1]->ToObject();; uint32_t offset = args[2]->Uint32Value(); diff --git a/test/simple/test-buffer.js b/test/simple/test-buffer.js index 1aa4611010d..ae67d09d6ed 100644 --- a/test/simple/test-buffer.js +++ b/test/simple/test-buffer.js @@ -520,3 +520,7 @@ assert.equal(0xee, b[0]); assert.equal(0xad, b[1]); assert.equal(0xbe, b[2]); assert.equal(0xef, b[3]); + + +// This should not segfault the program. +new Buffer('"pong"', 0, 6, 8031, '127.0.0.1')