process: make execve's args argument optional

Align the code with the documentation and similar methods used to
execute os commands - the `args` argument should be optional, and if
omitted, treated as an empty array (`[]`).

Fixes: https://github.com/nodejs/node/issues/58411
PR-URL: https://github.com/nodejs/node/pull/58412
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Richard Lau <richard.lau@ibm.com>
This commit is contained in:
Allon Murienik 2025-07-26 05:35:57 +03:00 committed by GitHub
parent daa9e4bb8e
commit a480d998d9
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 36 additions and 1 deletions

View file

@ -279,7 +279,7 @@ function wrapProcessMethods(binding) {
return true;
}
function execve(execPath, args, env) {
function execve(execPath, args = [], env) {
emitExperimentalWarning('process.execve');
const { isMainThread } = require('internal/worker');

View file

@ -1338,6 +1338,13 @@
}],
]
}, # overlapped-checker
{
'target_name': 'nop',
'type': 'executable',
'sources': [
'test/nop/nop.c',
]
}, # nop
{
'target_name': 'node_js2c',
'type': 'executable',

3
test/nop/nop.c Normal file
View file

@ -0,0 +1,3 @@
int main(void) {
return 0;
}

View file

@ -0,0 +1,25 @@
'use strict';
const { skip, isWindows, isIBMi } = require('../common');
const { fail } = require('assert');
const { isMainThread } = require('worker_threads');
const { dirname, join } = require('path');
const { existsSync } = require('fs');
if (!isMainThread) {
skip('process.execve is not available in Workers');
} else if (isWindows || isIBMi) {
skip('process.execve is not available in Windows or IBM i');
}
// Get full path to the executable used for the test
const executable = join(dirname(process.execPath), 'nop');
// Sanity check that the binary exists
if (!existsSync(executable)) {
skip(executable + ' binary is not available');
}
process.execve(executable);
// If process.execve succeeds, this should never be executed.
fail('process.execve failed');