Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork33.7k
Closed
Description
Bug report
Lines 255 to 273 inc085974
| void | |
| Py_SetPythonHome(constwchar_t*home) | |
| { | |
| inthas_value=home&&home[0]; | |
| PyMemAllocatorExold_alloc; | |
| _PyMem_SetDefaultAllocator(PYMEM_DOMAIN_RAW,&old_alloc); | |
| PyMem_RawFree(_Py_path_config.home); | |
| if (has_value) { | |
| _Py_path_config.home=_PyMem_RawWcsdup(home); | |
| } | |
| PyMem_SetAllocator(PYMEM_DOMAIN_RAW,&old_alloc); | |
| if (has_value&&_Py_path_config.home==NULL) { | |
| path_out_of_memory(__func__); | |
| } | |
| } |
IfPy_SetPythonHome was called with a non-empty string and is subsequently called with an empty one, it will always runPyMem_RawFree but only actually reset the pointer in.home ifhas_value is set, so ifhome && home[0] (i.e. non-empty string).
Minimal example:
Py_SetPythonHome(L"/non-empty");Py_SetPythonHome(L"");// After this, the memory region in .home is freed but the pointer is not overwritten
Your environment
The issue occurs in our (Python.NET) test-suite:pythonnet/pythonnet#1955
- CPython versions tested on: 3.7 - 3.11, only occurs in 3.11
- Operating system and architecture: Windows (x86, amd64), macOS (amd64), Linux (amd64)
Additional notes
This bug was introduced in#29041, in the initial commit:a63f5d8
It's a regression, the first faulty version was 3.11.0a3.