Skip to content
Permalink
Browse files

tls: check arg types of renegotiate()

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 1, 2019
1 parent c6ecbd3 commit 6b7c402518d4b77687584eba2a9284674962f343
Showing with 22 additions and 0 deletions.
  1. +6 −0 lib/_tls_wrap.js
  2. +16 −0 test/parallel/test-tls-disable-renegotiation.js
@@ -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,
@@ -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;

@@ -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) => {

0 comments on commit 6b7c402

Please sign in to comment.
You can’t perform that action at this time.