mirror of
https://github.com/python/cpython.git
synced 2025-12-15 21:44:50 +00:00
bpo-45582: Fix framework path and bootstrap build (GH-29954)
* Check NS API return values for NULL to prevent segfault in ``_bootstrap_python``. * Set modPathInitialized to 1 so the ``decode_to_dict`` path is used. Signed-off-by: Christian Heimes <christian@python.org>
This commit is contained in:
parent
064e53d19a
commit
06c4ae8b13
2 changed files with 14 additions and 23 deletions
|
|
@ -754,12 +754,10 @@ library_to_dict(PyObject *dict, const char *key)
|
|||
if (PyWin_DLLhModule) {
|
||||
return winmodule_to_dict(dict, key, PyWin_DLLhModule);
|
||||
}
|
||||
#elif defined(WITH_NEXT_FRAMEWORK) && !defined(PY_BOOTSTRAP_PYTHON)
|
||||
// _bootstrap_python does not use framework and crashes
|
||||
#elif defined(WITH_NEXT_FRAMEWORK)
|
||||
static char modPath[MAXPATHLEN + 1];
|
||||
static int modPathInitialized = -1;
|
||||
if (modPathInitialized < 0) {
|
||||
NSModule pythonModule;
|
||||
modPathInitialized = 0;
|
||||
|
||||
/* On Mac OS X we have a special case if we're running from a framework.
|
||||
|
|
@ -767,12 +765,17 @@ library_to_dict(PyObject *dict, const char *key)
|
|||
which is in the framework, not relative to the executable, which may
|
||||
be outside of the framework. Except when we're in the build
|
||||
directory... */
|
||||
pythonModule = NSModuleForSymbol(NSLookupAndBindSymbol("_Py_Initialize"));
|
||||
|
||||
/* Use dylib functions to find out where the framework was loaded from */
|
||||
const char *path = NSLibraryNameForModule(pythonModule);
|
||||
if (path) {
|
||||
strncpy(modPath, path, MAXPATHLEN);
|
||||
NSSymbol symbol = NSLookupAndBindSymbol("_Py_Initialize");
|
||||
if (symbol != NULL) {
|
||||
NSModule pythonModule = NSModuleForSymbol(symbol);
|
||||
if (pythonModule != NULL) {
|
||||
/* Use dylib functions to find out where the framework was loaded from */
|
||||
const char *path = NSLibraryNameForModule(pythonModule);
|
||||
if (path) {
|
||||
strncpy(modPath, path, MAXPATHLEN);
|
||||
modPathInitialized = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (modPathInitialized > 0) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue