@@ -173,7 +173,9 @@ getpath_isdir(PyObject *Py_UNUSED(self), PyObject *args)
173
173
path = PyUnicode_AsWideCharString (pathobj , NULL );
174
174
if (path ) {
175
175
#ifdef MS_WINDOWS
176
- r = (GetFileAttributesW (path ) & FILE_ATTRIBUTE_DIRECTORY ) ? Py_True : Py_False ;
176
+ DWORD attr = GetFileAttributesW (path );
177
+ r = (attr != INVALID_FILE_ATTRIBUTES ) &&
178
+ (attr & FILE_ATTRIBUTE_DIRECTORY ) ? Py_True : Py_False ;
177
179
#else
178
180
struct stat st ;
179
181
r = (_Py_wstat (path , & st ) == 0 ) && S_ISDIR (st .st_mode ) ? Py_True : Py_False ;
@@ -197,7 +199,9 @@ getpath_isfile(PyObject *Py_UNUSED(self), PyObject *args)
197
199
path = PyUnicode_AsWideCharString (pathobj , NULL );
198
200
if (path ) {
199
201
#ifdef MS_WINDOWS
200
- r = !(GetFileAttributesW (path ) & FILE_ATTRIBUTE_DIRECTORY ) ? Py_True : Py_False ;
202
+ DWORD attr = GetFileAttributesW (path );
203
+ r = (attr != INVALID_FILE_ATTRIBUTES ) &&
204
+ !(attr & FILE_ATTRIBUTE_DIRECTORY ) ? Py_True : Py_False ;
201
205
#else
202
206
struct stat st ;
203
207
r = (_Py_wstat (path , & st ) == 0 ) && S_ISREG (st .st_mode ) ? Py_True : Py_False ;
@@ -223,7 +227,9 @@ getpath_isxfile(PyObject *Py_UNUSED(self), PyObject *args)
223
227
if (path ) {
224
228
#ifdef MS_WINDOWS
225
229
const wchar_t * ext ;
226
- r = (GetFileAttributesW (path ) & FILE_ATTRIBUTE_DIRECTORY ) &&
230
+ DWORD attr = GetFileAttributesW (path );
231
+ r = (attr != INVALID_FILE_ATTRIBUTES ) &&
232
+ !(attr & FILE_ATTRIBUTE_DIRECTORY ) &&
227
233
SUCCEEDED (PathCchFindExtension (path , cchPath , & ext )) &&
228
234
(CompareStringOrdinal (ext , -1 , L".exe" , -1 , 1 /* ignore case */ ) == CSTR_EQUAL )
229
235
? Py_True : Py_False ;
0 commit comments