From d86e38e2d2a7883d91603dbd73cd8cde6bbd751b Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Mon, 10 Sep 2018 12:06:45 +0200 Subject: [PATCH] src: fix `--prof-process` CLI argument handling Make sure that options after `--prof-process` are not treated as Node.js options. Fixes: https://github.com/nodejs/node/issues/22786 --- src/node_options.cc | 2 ++ .../parallel/test-tick-processor-arguments.js | 24 +++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 test/parallel/test-tick-processor-arguments.js diff --git a/src/node_options.cc b/src/node_options.cc index c1cbb59e291044..8027ee677c1e12 100644 --- a/src/node_options.cc +++ b/src/node_options.cc @@ -108,6 +108,8 @@ EnvironmentOptionsParser::EnvironmentOptionsParser() { AddOption("--prof-process", "process V8 profiler output generated using --prof", &EnvironmentOptions::prof_process); + // Options after --prof-process are passed through to the prof processor. + AddAlias("--prof-process", { "--prof-process", "--" }); AddOption("--redirect-warnings", "write warnings to file instead of stderr", &EnvironmentOptions::redirect_warnings, diff --git a/test/parallel/test-tick-processor-arguments.js b/test/parallel/test-tick-processor-arguments.js new file mode 100644 index 00000000000000..921b851cc297b2 --- /dev/null +++ b/test/parallel/test-tick-processor-arguments.js @@ -0,0 +1,24 @@ +'use strict'; +require('../common'); +const tmpdir = require('../common/tmpdir'); +const fs = require('fs'); +const assert = require('assert'); +const { spawnSync } = require('child_process'); + +tmpdir.refresh(); +process.chdir(tmpdir.path); + +// Generate log file. +spawnSync(process.execPath, [ '--prof', '-p', '42' ]); + +const logfile = fs.readdirSync('.').filter((name) => name.endsWith('.log'))[0]; +assert(logfile); + +// Make sure that the --preprocess argument is passed through correctly. +const { stdout } = spawnSync( + process.execPath, + [ '--prof-process', '--preprocess', logfile ], + { encoding: 'utf8' }); + +// Make sure that the result is valid JSON. +JSON.parse(stdout);