| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -590,9 +590,8 @@ void Worker::New(const FunctionCallbackInfo<Value>& args) { | |||
| 590 | 590 | exec_argv.push_back(arg_string); | |
| 591 | 591 | } | |
| 592 | 592 | } else { | |
| 593 | - exec_argv_out = env->exec_argv(); | ||
| 594 | 593 | exec_argv.insert( | |
| 595 | - exec_argv.end(), exec_argv_out.begin(), exec_argv_out.end()); | ||
| 594 | + exec_argv.end(), env->exec_argv().begin(), env->exec_argv().end()); | ||
| 596 | 595 | } | |
| 597 | 596 | ||
| 598 | 597 | std::vector<std::string> invalid_args{}; | |
@@ -608,7 +607,9 @@ void Worker::New(const FunctionCallbackInfo<Value>& args) { | |||
| 608 | 607 | ||
| 609 | 608 | // The first argument is program name. | |
| 610 | 609 | invalid_args.erase(invalid_args.begin()); | |
| 611 | - if (errors.size() > 0 || invalid_args.size() > 0) { | ||
| 610 | + // Only fail for explicitly provided execArgv, this protects from failures | ||
| 611 | + // when execArgv from parent's execArgv is used (which is the default). | ||
| 612 | + if (errors.size() > 0 || (invalid_args.size() > 0 && args[2]->IsArray())) { | ||
| 612 | 613 | Local<Value> error; | |
| 613 | 614 | if (!ToV8Value(env->context(), errors.size() > 0 ? errors : invalid_args) | |
| 614 | 615 | .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