diff --git a/src/stream_base.cc b/src/stream_base.cc index 3ed622d7ef35a2..19130b5bb8bd7e 100644 --- a/src/stream_base.cc +++ b/src/stream_base.cc @@ -189,9 +189,14 @@ int StreamBase::Writev(const FunctionCallbackInfo& args) { int StreamBase::WriteBuffer(const FunctionCallbackInfo& args) { CHECK(args[0]->IsObject()); - CHECK(Buffer::HasInstance(args[1])); + Environment* env = Environment::GetCurrent(args); + if (!args[1]->IsUint8Array()) { + env->ThrowTypeError("Second argument must be a buffer"); + return 0; + } + Local req_wrap_obj = args[0].As(); const char* data = Buffer::Data(args[1]); size_t length = Buffer::Length(args[1]); diff --git a/test/parallel/test-stream-base-typechecking.js b/test/parallel/test-stream-base-typechecking.js new file mode 100644 index 00000000000000..8d559a42dfc54a --- /dev/null +++ b/test/parallel/test-stream-base-typechecking.js @@ -0,0 +1,14 @@ +'use strict'; +const common = require('../common'); +const assert = require('assert'); +const net = require('net'); + +const server = net.createServer().listen(0, common.mustCall(() => { + const client = net.connect(server.address().port, common.mustCall(() => { + assert.throws(() => { + client.write('broken', 'buffer'); + }, /^TypeError: Second argument must be a buffer$/); + client.destroy(); + server.close(); + })); +}));