|
12 | 12 | #include "pycore_pystate.h" // _PyInterpreterState_GET()
|
13 | 13 |
|
14 | 14 | #include "osdefs.h" // MAXPATHLEN
|
15 |
| -#include "Python/stdlib_module_names.h" // _Py_stdlib_module_names |
| 15 | +#include "../Python/stdlib_module_names.h" // _Py_stdlib_module_names |
16 | 16 |
|
17 | 17 |
|
18 | 18 | static PyMemberDef module_members[] = {
|
@@ -872,33 +872,19 @@ _Py_module_getattro_impl(PyModuleObject *m, PyObject *name, int suppress)
|
872 | 872 | // Check mod.__name__ in sys.stdlib_module_names
|
873 | 873 | // and os.path.dirname(mod.__spec__.origin) == os.getcwd()
|
874 | 874 | if (origin && is_name_stdlib_module(mod_name)) {
|
875 |
| - wchar_t cwdbuf[MAXPATHLEN]; |
| 875 | + wchar_t cwdbuf[MAXPATHLEN], originbuf[MAXPATHLEN]; |
876 | 876 | if(_Py_wgetcwd(cwdbuf, MAXPATHLEN)) {
|
877 |
| - PyObject *cwd = PyUnicode_FromWideChar(cwdbuf, wcslen(cwdbuf)); |
878 |
| - if (!cwd) { |
| 877 | + int rc = PyUnicode_AsWideChar(origin, originbuf, MAXPATHLEN); |
| 878 | + if (rc < 0) { |
879 | 879 | goto done;
|
880 | 880 | }
|
881 |
| - const char sep_char = SEP; |
882 |
| - PyObject *sep = PyUnicode_FromStringAndSize(&sep_char, 1); |
883 |
| - if (!sep) { |
884 |
| - Py_DECREF(cwd); |
885 |
| - goto done; |
886 |
| - } |
887 |
| - PyObject *parts = PyUnicode_RPartition(origin, sep); |
888 |
| - Py_DECREF(sep); |
889 |
| - if (!parts) { |
890 |
| - Py_DECREF(cwd); |
891 |
| - goto done; |
892 |
| - } |
893 |
| - int rc = PyUnicode_Compare(cwd, PyTuple_GET_ITEM(parts, 0)); |
894 |
| - if (rc == -1 && PyErr_Occurred()) { |
895 |
| - Py_DECREF(parts); |
896 |
| - Py_DECREF(cwd); |
897 |
| - goto done; |
| 881 | + wchar_t *sep = wcsrchr(originbuf, SEP); |
| 882 | + if (sep) { |
| 883 | + *sep = L'\0'; |
| 884 | + if (wcscmp(cwdbuf, originbuf) == 0) { |
| 885 | + is_script_shadowing_stdlib = 1; |
| 886 | + } |
898 | 887 | }
|
899 |
| - is_script_shadowing_stdlib = rc == 0; |
900 |
| - Py_DECREF(parts); |
901 |
| - Py_DECREF(cwd); |
902 | 888 | }
|
903 | 889 | }
|
904 | 890 |
|
|
0 commit comments