|
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