diff options
author | Victor Stinner <vstinner@python.org> | 2020-11-05 17:58:07 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-11-05 17:58:07 (GMT) |
commit | dc42af8fd16b10127ce1fc93c13bc1bfd2674aa2 (patch) | |
tree | 4d45407632e738acb07a54af480d16c7fadef8b4 /Python/initconfig.c | |
parent | f3cb81431574453aac3b6dcadb3120331e6a8f1c (diff) | |
download | cpython-dc42af8fd16b10127ce1fc93c13bc1bfd2674aa2.zip cpython-dc42af8fd16b10127ce1fc93c13bc1bfd2674aa2.tar.gz cpython-dc42af8fd16b10127ce1fc93c13bc1bfd2674aa2.tar.bz2 |
bpo-42260: PyConfig_Read() only parses argv once (GH-23168)
The PyConfig_Read() function now only parses PyConfig.argv arguments
once: PyConfig.parse_argv is set to 2 after arguments are parsed.
Since Python arguments are strippped from PyConfig.argv, parsing
arguments twice would parse the application options as Python
options.
* Rework the PyConfig documentation.
* Fix _testinternalcapi.set_config() error handling.
* SetConfigTests no longer needs parse_argv=0 when restoring the old
configuration.
Diffstat (limited to 'Python/initconfig.c')
-rw-r--r-- | Python/initconfig.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/Python/initconfig.c b/Python/initconfig.c index d54d5b7..e0811b5 100644 --- a/Python/initconfig.c +++ b/Python/initconfig.c @@ -1325,8 +1325,6 @@ _PyConfig_FromDict(PyConfig *config, PyObject *dict) GET_UINT(_init_main); GET_UINT(_isolated_interpreter); - assert(config_check_consistency(config)); - #undef CHECK_VALUE #undef GET_UINT #undef GET_WSTR @@ -2145,6 +2143,11 @@ config_read(PyConfig *config) config->configure_c_stdio = 1; } + // Only parse arguments once. + if (config->parse_argv == 1) { + config->parse_argv = 2; + } + return _PyStatus_OK(); } @@ -2635,7 +2638,7 @@ core_read_precmdline(PyConfig *config, _PyPreCmdline *precmdline) { PyStatus status; - if (config->parse_argv) { + if (config->parse_argv == 1) { if (_PyWideStringList_Copy(&precmdline->argv, &config->argv) < 0) { return _PyStatus_NO_MEMORY(); } @@ -2713,7 +2716,7 @@ config_read_cmdline(PyConfig *config) } } - if (config->parse_argv) { + if (config->parse_argv == 1) { Py_ssize_t opt_index; status = config_parse_cmdline(config, &cmdline_warnoptions, &opt_index); if (_PyStatus_EXCEPTION(status)) { |