net: throw error to object mode in Socket

Fixes: https://github.com/nodejs/node/issues/40336

PR-URL: https://github.com/nodejs/node/pull/40344
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Minwoo Jung <nodecorelab@gmail.com>
Reviewed-By: Zijian Liu <lxxyxzj@gmail.com>
Reviewed-By: Robert Nagy <ronagy@icloud.com>
This commit is contained in:
Daijiro Wachi 2021-10-07 15:44:19 +09:00 committed by Node.js GitHub Bot
parent c350c217f4
commit 46446623f5
3 changed files with 70 additions and 0 deletions

View File

@ -30,6 +30,7 @@ const {
NumberIsNaN,
NumberParseInt,
ObjectDefineProperty,
ObjectKeys,
ObjectSetPrototypeOf,
Symbol,
} = primordials;
@ -282,6 +283,20 @@ const kSetNoDelay = Symbol('kSetNoDelay');
function Socket(options) {
if (!(this instanceof Socket)) return new Socket(options);
const invalidKeys = [
'objectMode',
'readableObjectMode',
'writableObjectMode',
];
invalidKeys.forEach((invalidKey) => {
if (ObjectKeys(options).includes(invalidKey)) {
throw new ERR_INVALID_ARG_VALUE(
`options.${invalidKey}`,
options[invalidKey],
'is not supported'
);
}
});
this.connecting = false;
// Problem with this is that users can supply their own handle, that may not

View File

@ -0,0 +1,27 @@
'use strict';
const common = require('../common');
const assert = require('assert');
const net = require('net');
{
const invalidKeys = [
'objectMode',
'readableObjectMode',
'writableObjectMode',
];
invalidKeys.forEach((invalidKey) => {
const option = {
...common.localhostIPv4,
[invalidKey]: true
};
const message = `The property 'options.${invalidKey}' is not supported. Received true`;
assert.throws(() => {
net.createConnection(option);
}, {
code: 'ERR_INVALID_ARG_VALUE',
name: 'TypeError',
message: new RegExp(message)
});
});
}

View File

@ -0,0 +1,28 @@
'use strict';
const common = require('../common');
const assert = require('assert');
const net = require('net');
{
const invalidKeys = [
'objectMode',
'readableObjectMode',
'writableObjectMode',
];
invalidKeys.forEach((invalidKey) => {
const option = {
...common.localhostIPv4,
[invalidKey]: true
};
const message = `The property 'options.${invalidKey}' is not supported. Received true`;
assert.throws(() => {
const socket = new net.Socket(option);
socket.connect({ port: 8080 });
}, {
code: 'ERR_INVALID_ARG_VALUE',
name: 'TypeError',
message: new RegExp(message)
});
});
}