child_process: ensure message sanity at source
Error messages coming out of de-serialization at the send target is not consumable. So detect the scenario and fix it at the send source Ref: https://github.com/nodejs/node/issues/20314 PR-URL: https://github.com/nodejs/node/pull/24787 Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
This commit is contained in:
parent
993bdff9ff
commit
daa97df343
@ -665,6 +665,18 @@ function setupChannel(target, channel) {
|
||||
if (message === undefined)
|
||||
throw new ERR_MISSING_ARGS('message');
|
||||
|
||||
// Non-serializable messages should not reach the remote
|
||||
// end point; as any failure in the stringification there
|
||||
// will result in error message that is weakly consumable.
|
||||
// So perform a sanity check on message prior to sending.
|
||||
if (typeof message !== 'string' &&
|
||||
typeof message !== 'object' &&
|
||||
typeof message !== 'number' &&
|
||||
typeof message !== 'boolean') {
|
||||
throw new ERR_INVALID_ARG_TYPE(
|
||||
'message', ['string', 'object', 'number', 'boolean'], message);
|
||||
}
|
||||
|
||||
// Support legacy function signature
|
||||
if (typeof options === 'boolean') {
|
||||
options = { swallowErrors: options };
|
||||
|
@ -49,6 +49,12 @@ assert.throws(() => n.send(), {
|
||||
code: 'ERR_MISSING_ARGS'
|
||||
});
|
||||
|
||||
assert.throws(() => n.send(Symbol()), {
|
||||
name: 'TypeError [ERR_INVALID_ARG_TYPE]',
|
||||
message: 'The "message" argument must be one of type string,' +
|
||||
' object, number, or boolean. Received type symbol',
|
||||
code: 'ERR_INVALID_ARG_TYPE'
|
||||
});
|
||||
n.send({ hello: 'world' });
|
||||
|
||||
n.on('exit', common.mustCall((c) => {
|
||||
|
Loading…
x
Reference in New Issue
Block a user