Skip to content

Commit

Permalink
bpo-38234: Fix PyConfig_Read() when Py_SetPath() was called (GH-16298)
Browse files Browse the repository at this point in the history
* If Py_SetPath() has been called, _PyConfig_InitPathConfig() now
  uses its value.
* Py_Initialize() now longer copies path configuration from PyConfig
  to the global path configuration (_Py_path_config).
  • Loading branch information
vstinner committed Sep 20, 2019
1 parent 77af229 commit e267793
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 7 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Python ignored path passed to :c:func:`Py_SetPath`, fix Python
initialization to use the specified path.
10 changes: 6 additions & 4 deletions Modules/getpath.c
Original file line number Diff line number Diff line change
Expand Up @@ -1213,10 +1213,12 @@ calculate_path_impl(const PyConfig *config,
"Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]\n");
}

status = calculate_module_search_path(config, calculate,
prefix, exec_prefix, pathconfig);
if (_PyStatus_EXCEPTION(status)) {
return status;
if (pathconfig->module_search_path == NULL) {
status = calculate_module_search_path(config, calculate,
prefix, exec_prefix, pathconfig);
if (_PyStatus_EXCEPTION(status)) {
return status;
}
}

status = calculate_reduce_prefix(calculate, prefix, Py_ARRAY_LENGTH(prefix));
Expand Down
9 changes: 6 additions & 3 deletions PC/getpathp.c
Original file line number Diff line number Diff line change
Expand Up @@ -1003,9 +1003,12 @@ calculate_path_impl(const PyConfig *config,

calculate_home_prefix(calculate, prefix);

status = calculate_module_search_path(config, calculate, pathconfig, prefix);
if (_PyStatus_EXCEPTION(status)) {
return status;
if (pathconfig->module_search_path == NULL) {
status = calculate_module_search_path(config, calculate,
pathconfig, prefix);
if (_PyStatus_EXCEPTION(status)) {
return status;
}
}

done:
Expand Down
7 changes: 7 additions & 0 deletions Python/pathconfig.c
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,13 @@ pathconfig_calculate(_PyPathConfig *pathconfig, const PyConfig *config)
PyMemAllocatorEx old_alloc;
_PyMem_SetDefaultAllocator(PYMEM_DOMAIN_RAW, &old_alloc);

if (copy_wstr(&new_config.module_search_path,
_Py_path_config.module_search_path) < 0)
{
status = _PyStatus_NO_MEMORY();
goto error;
}

/* Calculate program_full_path, prefix, exec_prefix,
dll_path (Windows), and module_search_path */
status = _PyPathConfig_Calculate(&new_config, config);
Expand Down

0 comments on commit e267793

Please sign in to comment.