| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -625,9 +625,8 @@ void Worker::New(const FunctionCallbackInfo<Value>& args) { | |||
| 625 | 625 | exec_argv.push_back(arg_string); | |
| 626 | 626 | } | |
| 627 | 627 | } else { | |
| 628 | - exec_argv_out = env->exec_argv(); | ||
| 629 | 628 | exec_argv.insert( | |
| 630 | - exec_argv.end(), exec_argv_out.begin(), exec_argv_out.end()); | ||
| 629 | + exec_argv.end(), env->exec_argv().begin(), env->exec_argv().end()); | ||
| 631 | 630 | } | |
| 632 | 631 | ||
| 633 | 632 | std::vector<std::string> invalid_args{}; | |
@@ -643,7 +642,9 @@ void Worker::New(const FunctionCallbackInfo<Value>& args) { | |||
| 643 | 642 | ||
| 644 | 643 | // The first argument is program name. | |
| 645 | 644 | invalid_args.erase(invalid_args.begin()); | |
| 646 | - if (errors.size() > 0 || invalid_args.size() > 0) { | ||
| 645 | + // Only fail for explicitly provided execArgv, this protects from failures | ||
| 646 | + // when execArgv from parent's execArgv is used (which is the default). | ||
| 647 | + if (errors.size() > 0 || (invalid_args.size() > 0 && args[2]->IsArray())) { | ||
| 647 | 648 | Local<Value> error; | |
| 648 | 649 | if (!ToV8Value(env->context(), errors.size() > 0 ? errors : invalid_args) | |
| 649 | 650 | .ToLocal(&error)) { | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -1,16 +1,31 @@ | |||
| 1 | - // Flags: --expose-internals | ||
| 1 | + // Flags: --expose-internals --expose-gc | ||
| 2 | 2 | 'use strict'; | |
| 3 | 3 | require('../common'); | |
| 4 | 4 | const { Worker } = require('worker_threads'); | |
| 5 | + const assert = require('assert'); | ||
| 5 | 6 | ||
| 6 | 7 | const CODE = ` | |
| 7 | 8 | // If the --expose-internals flag does not pass to worker | |
| 8 | 9 | // require function will throw an error | |
| 9 | 10 | require('internal/options'); | |
| 11 | + global.gc(); | ||
| 10 | 12 | `; | |
| 11 | - // Test if the flags is passed to worker threads | ||
| 13 | + | ||
| 14 | + // Test if the flags is passed to worker threads correctly | ||
| 15 | + // and do not throw an error with the invalid execArgv | ||
| 16 | + // when execArgv is inherited from parent | ||
| 12 | 17 | // See https://github.com/nodejs/node/issues/52825 | |
| 18 | + // See https://github.com/nodejs/node/issues/53011 | ||
| 19 | + | ||
| 20 | + // Inherited env, execArgv from the parent will be ok | ||
| 13 | 21 | new Worker(CODE, { eval: true }); | |
| 14 | - new Worker(CODE, { eval: true, env: process.env, execArgv: ['--expose-internals'] }); | ||
| 22 | + // Pass process.env explicitly and inherited execArgv from parent will be ok | ||
| 15 | 23 | new Worker(CODE, { eval: true, env: process.env }); | |
| 24 | + // Inherited env from the parent and pass execArgv (Node.js options) explicitly will be ok | ||
| 16 | 25 | new Worker(CODE, { eval: true, execArgv: ['--expose-internals'] }); | |
| 26 | + // Pass process.env and execArgv (Node.js options) explicitly will be ok | ||
| 27 | + new Worker(CODE, { eval: true, env: process.env, execArgv: ['--expose-internals'] }); | ||
| 28 | + // Pass execArgv (V8 options) explicitly will throw an error | ||
| 29 | + assert.throws(() => { | ||
| 30 | + new Worker(CODE, { eval: true, execArgv: ['--expose-gc'] }); | ||
| 31 | + }, /ERR_WORKER_INVALID_EXEC_ARGV/); | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments