tls: fix tlsSocket.setMaxSendFragment abort

PR-URL: https://github.com/nodejs/node/pull/38170
Fixes: https://github.com/nodejs/node/issues/38169
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
eladkeyshawn authored and Antoine du Hamel committed 2021-04-21 23:16:35 +02:00
1 parent 8cb6b5d2a1
commit 6e3f98569c
2 files changed
+28 -3

No files matched your search

+3 -1
View File
@@ -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;
};
+25 -2
View File
@@ -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);