Karl Nelson <[email protected]> added the comment:
Gave another series of shots at the problem. So the reason that attaching the
debugger fixes the issue is that it calls LoadLibraryExW for a bunch libraries
when it attaches.
I was also able to unconditionally trigger the bug even when loading without
the pyc. It appears that calling "import _ssh" will cause whatever conflict
is happening to trigger immediately.
Other than than progress was minimal. Attaching the debugger causes so many
changes to the control flow that I can't get the bad path to trigger and I
can't get the debugger to attach once you start down the path. I tried
creating a segfault but again I can't get the debugger to attach because
Detours is interfering with the attachment process.
I also tried disabling some of the flags that JPype was adding to the python
build process to see if any are related. "/DEBUG" on the linker does not do
anything to the problem. The other options were '/Zi', '/EHsc', '/std:c++14'.
Nothing here is out of the ordinary.
I do not see anything in the link line that shows evidence of static linkage or
likely to cause a conflict. The exact same line is being used with Python 3.8.
link.exe /nologo /INCREMENTAL:NO /LTCG /DLL /MANIFEST:EMBED,ID=2
/MANIFESTUAC:NO
/LIBPATH:C:\Users\nelson85\AppData\Local\Programs\Python\Python39\libs
/LIBPATH:C:\Users\nelson85\AppData\Local\Programs\Python\Python39\PCbuild\amd64
/LIBPATH:C:\Program Files (x86)\Microsoft Visual
Studio\2019\Community\VC\Tools\MSVC\14.28.29333\ATLMFC\lib\x64
/LIBPATH:C:\Program Files (x86)\Microsoft Visual
Studio\2019\Community\VC\Tools\MSVC\14.28.29333\lib\x64 /LIBPATH:C:\Program
Files (x86)\Windows Kits\NETFXSDK\4.8\lib\um\x64 /LIBPATH:C:\Program Files
(x86)\Windows Kits\10\lib\10.0.18362.0\ucrt\x64 /LIBPATH:C:\Program Files
(x86)\Windows Kits\10\lib\10.0.18362.0\um\x64 /LIBPATH:C:\Program Files
(x86)\Microsoft Visual
Studio\2019\Community\VC\Tools\MSVC\14.28.29333\ATLMFC\lib\x64
/LIBPATH:C:\Program Files (x86)\Microsoft Visual
Studio\2019\Community\VC\Tools\MSVC\14.28.29333\lib\x64 /LIBPATH:C:\Program
Files (x86)\Windows Kits\NETFXSDK\4.8\lib\um\x64 /LIBPATH:C:\Program Files
(x86)\Windows Kits\10\
lib\10.0.18362.0\ucrt\x64 /LIBPATH:C:\Program Files (x86)\Windows
Kits\10\lib\10.0.18362.0\um\x64 /EXPORT:PyInit__jpype
$(OBJECTS) /OUT:build\lib.win-amd64-3.9\_jpype.cp39-win_amd64.pyd
/IMPLIB:build\temp.win-amd64-3.9\Release\native\common\_jpype.cp39-win_amd64.lib
So I remain at a loss how to proceed forward. Nothing has changed in JPype or
its symbols since Python 3.8 so this is clearly taking place in Python or at
the OS level. Is it possible that Python shipped with bad dlls for the 3.9.0
build? If so then looking at the source code may be the wrong approach.
After all depending on the order of libraries I trigger or don't trigger the
bug.
I should note that the difference between loading successfully py and pyc seems
to have been triggered in PC/getpathc.c .... could it be the change to remove
loading api-ms-win-core-path?
```
static void
join(wchar_t *buffer, const wchar_t *stuff)
{
- if (_PathCchCombineEx_Initialized == 0) {
- HMODULE pathapi = LoadLibraryExW(L"api-ms-win-core-path-l1-1-0.dll",
NULL,
- LOAD_LIBRARY_SEARCH_SYSTEM32);
- if (pathapi) {
- _PathCchCombineEx = (PPathCchCombineEx)GetProcAddress(pathapi,
"PathCchCombineEx");
- }
- else {
- _PathCchCombineEx = NULL;
- }
- _PathCchCombineEx_Initialized = 1;
- }
-
- if (_PathCchCombineEx) {
- if (FAILED(_PathCchCombineEx(buffer, MAXPATHLEN+1, buffer, stuff, 0)))
{
- Py_FatalError("buffer overflow in getpathp.c's join()");
- }
- } else {
- if (!PathCombineW(buffer, buffer, stuff)) {
- Py_FatalError("buffer overflow in getpathp.c's join()");
- }
+ if (FAILED(PathCchCombineEx(buffer, MAXPATHLEN+1, buffer, stuff, 0))) {
+ Py_FatalError("buffer overflow in getpathp.c's join()");
}
}
```
Also given JPype is really a generic C++ CPython module (with no special
options other than /Zi /EHsc why hasn't anyone else triggered this?
----------
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue42529>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com