diff --git a/lib/_tls_wrap.js b/lib/_tls_wrap.js index 9ecd92021de17f..a54bd0d0d35777 100644 --- a/lib/_tls_wrap.js +++ b/lib/_tls_wrap.js @@ -86,9 +86,10 @@ const { const { validateBuffer, validateCallback, + validateInt32, validateObject, validateString, - validateUint32 + validateUint32, } = require('internal/validators'); const { InternalX509Certificate @@ -893,6 +894,7 @@ TLSSocket.prototype.exportKeyingMaterial = function(length, label, context) { }; TLSSocket.prototype.setMaxSendFragment = function setMaxSendFragment(size) { + validateInt32(size, 'size'); return this._handle.setMaxSendFragment(size) === 1; }; diff --git a/test/parallel/test-tls-max-send-fragment.js b/test/parallel/test-tls-max-send-fragment.js index eca995d66483b5..bbb7849f005bf9 100644 --- a/test/parallel/test-tls-max-send-fragment.js +++ b/test/parallel/test-tls-max-send-fragment.js @@ -33,15 +33,38 @@ const buf = Buffer.allocUnsafe(10000); let received = 0; const maxChunk = 768; +const invalidArgumentError = { + name: 'TypeError', + code: 'ERR_INVALID_ARG_TYPE' +}; + const server = tls.createServer({ key: fixtures.readKey('agent1-key.pem'), cert: fixtures.readKey('agent1-cert.pem') }, function(c) { - // Lower and upper limits + + // No size is passed. + assert.throws(() => c.setMaxSendFragment(), invalidArgumentError); + + // Invalid arg is passed. + [null, undefined, '', {}, false, true, []].forEach((arg) => { + assert.throws(() => c.setMaxSendFragment(arg), invalidArgumentError); + }); + + [NaN, Infinity, 2 ** 31].forEach((arg) => { + assert.throws(() => c.setMaxSendFragment(arg), { + name: 'RangeError', + code: 'ERR_OUT_OF_RANGE' + }); + }); + + assert.throws(() => c.setMaxSendFragment(Symbol()), { name: 'TypeError' }); + + // Lower and upper limits. assert(!c.setMaxSendFragment(511)); assert(!c.setMaxSendFragment(16385)); - // Correct fragment size + // Correct fragment size. assert(c.setMaxSendFragment(maxChunk)); c.end(buf);