Skip to content

Commit

Permalink
tls: check arg types of renegotiate()
Browse files Browse the repository at this point in the history
Don't throw on invalid property access if options is not provided, and
ensure callback is a function.

PR-URL: #25876
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
  • Loading branch information
sam-github committed Feb 4, 2019
1 parent c6ecbd3 commit 6b7c402
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 0 deletions.
6 changes: 6 additions & 0 deletions lib/_tls_wrap.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ const { owner_symbol } = require('internal/async_hooks').symbols;
const { SecureContext: NativeSecureContext } = internalBinding('crypto');
const {
ERR_INVALID_ARG_TYPE,
ERR_INVALID_CALLBACK,
ERR_MULTIPLE_CALLBACK,
ERR_SOCKET_CLOSED,
ERR_TLS_DH_PARAM_SIZE,
Expand Down Expand Up @@ -581,6 +582,11 @@ TLSSocket.prototype._init = function(socket, wrap) {
};

TLSSocket.prototype.renegotiate = function(options, callback) {
if (options === null || typeof options !== 'object')
throw new ERR_INVALID_ARG_TYPE('options', 'Object', options);
if (callback != null && typeof callback !== 'function')
throw new ERR_INVALID_CALLBACK();

if (this.destroyed)
return;

Expand Down
16 changes: 16 additions & 0 deletions test/parallel/test-tls-disable-renegotiation.js
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,22 @@ server.listen(0, common.mustCall(() => {
};
const client = tls.connect(options, common.mustCall(() => {
client.write('');

common.expectsError(() => client.renegotiate(), {
code: 'ERR_INVALID_ARG_TYPE',
type: TypeError,
});

common.expectsError(() => client.renegotiate(common.mustNotCall()), {
code: 'ERR_INVALID_ARG_TYPE',
type: TypeError,
});

common.expectsError(() => client.renegotiate({}, false), {
code: 'ERR_INVALID_CALLBACK',
type: TypeError,
});

// Negotiation is still permitted for this first
// attempt. This should succeed.
let ok = client.renegotiate(options, common.mustCall((err) => {
Expand Down

0 comments on commit 6b7c402

Please sign in to comment.