diff -r 4b2fdd4dd700 Objects/fileobject.c --- a/Objects/fileobject.c Tue Jun 11 15:00:21 2013 -0700 +++ b/Objects/fileobject.c Tue Jun 11 18:57:53 2013 -0700 @@ -121,9 +121,15 @@ { #if defined(HAVE_FSTAT) && defined(S_IFDIR) && defined(EISDIR) struct stat buf; + int fd; + if (f->f_fp == NULL) return f; - if (fstat(fileno(f->f_fp), &buf) == 0 && + + if((fd = fileno(f->f_fp)) < 0) + return f; + + if (fstat(fd, &buf) == 0 && S_ISDIR(buf.st_mode)) { char *msg = strerror(EISDIR); PyObject *exc = PyObject_CallFunction(PyExc_IOError, "(isO)",