diff options
author | 2017-01-31 15:38:27 -0800 | |
---|---|---|
committer | 2017-01-31 15:38:27 -0800 | |
commit | de3ed4c670f9cdbf8b1f1edc53eaa0cc34515eda (patch) | |
tree | 40673d01125ac3df523335b599e70da89f3af382 | |
parent | 87b8195ebaefa6cc47a89631022a7849ebfcc45a (diff) | |
parent | a171538b92994ccabf55c353f2a136db5563455c (diff) |
Merge pull request #9516 from murgatroid99/node_addservice_argument_validation
Node: Validate arguments to addService, fix a couple of minor issues
-rw-r--r-- | src/node/src/client.js | 9 | ||||
-rw-r--r-- | src/node/src/server.js | 8 |
2 files changed, 11 insertions, 6 deletions
diff --git a/src/node/src/client.js b/src/node/src/client.js index 134ef239c2..44081a3a6c 100644 --- a/src/node/src/client.js +++ b/src/node/src/client.js @@ -108,7 +108,7 @@ function _write(chunk, encoding, callback) { but passing an object that causes a serialization failure is a misuse of the API anyway, so that's OK. The primary purpose here is to give the programmer a useful error and to stop the stream properly */ - this.call.cancelWithStatus(grpc.status.INTERNAL, "Serialization failure"); + this.call.cancelWithStatus(grpc.status.INTERNAL, 'Serialization failure'); callback(e); } if (_.isFinite(encoding)) { @@ -831,13 +831,12 @@ exports.waitForClientReady = function(client, deadline, callback) { */ exports.makeProtobufClientConstructor = function(service, options) { var method_attrs = common.getProtobufServiceAttrs(service, options); - var deprecatedArgumentOrder = false; - if (options) { - deprecatedArgumentOrder = options.deprecatedArgumentOrder; + if (!options) { + options = {deprecatedArgumentOrder: false}; } var Client = exports.makeClientConstructor( method_attrs, common.fullyQualifiedName(service), - deprecatedArgumentOrder); + options); Client.service = service; Client.service.grpc_options = options; return Client; diff --git a/src/node/src/server.js b/src/node/src/server.js index da9c6b2d7f..d501e76c67 100644 --- a/src/node/src/server.js +++ b/src/node/src/server.js @@ -728,11 +728,17 @@ var defaultHandler = { * method implementation for the provided service. */ Server.prototype.addService = function(service, implementation) { + if (!_.isObjectLike(service) || !_.isObjectLike(implementation)) { + throw new Error('addService requires two objects as arguments'); + } + if (_.keys(service).length === 0) { + throw new Error('Cannot add an empty service to a server'); + } if (this.started) { throw new Error('Can\'t add a service to a started server.'); } var self = this; - _.each(service, function(attrs, name) { + _.forOwn(service, function(attrs, name) { var method_type; if (attrs.requestStream) { if (attrs.responseStream) { |