From a0d377b6270947f0568d3ad2e64111d84d2eff61 Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Sun, 30 Apr 2017 01:48:37 +0200 Subject: [PATCH] src: turn buffer type-CHECK into exception Turn a `CHECK()` that could be brought to fail using public APIs into throwing an error. Fixes: https://github.com/nodejs/node/issues/12152 PR-URL: https://github.com/nodejs/node/pull/12753 Reviewed-By: James M Snell Reviewed-By: Colin Ihrig Reviewed-By: Timothy Gu Reviewed-By: Refael Ackermann --- src/stream_base.cc | 7 ++++++- test/parallel/test-stream-base-typechecking.js | 14 ++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 test/parallel/test-stream-base-typechecking.js 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(); + })); +}));