diff -r 0acc5626a578 Modules/_cursesmodule.c --- a/Modules/_cursesmodule.c Tue Oct 23 22:50:11 2012 +0100 +++ b/Modules/_cursesmodule.c Sat Dec 08 01:17:17 2012 +0100 @@ -1713,7 +1713,11 @@ remove(fn); return res; } - fseek(fp, 0, 0); + if (fseek(fp, 0, 0) == -1) { + fclose(fp); + remove(fn); + return PyErr_SetFromErrnoWithFilename(PyExc_IOError, fn); + } while (1) { char buf[BUFSIZ]; Py_ssize_t n = fread(buf, 1, BUFSIZ, fp); @@ -2293,7 +2297,11 @@ return PyErr_SetFromErrnoWithFilename(PyExc_IOError, fn); } Py_DECREF(data); - fseek(fp, 0, 0); + if (fseek(fp, 0, 0) == -1) { + fclose(fp); + remove(fn); + return PyErr_SetFromErrnoWithFilename(PyExc_IOError, fn); + } win = getwin(fp); fclose(fp); remove(fn); diff -r 0acc5626a578 Modules/_posixsubprocess.c --- a/Modules/_posixsubprocess.c Tue Oct 23 22:50:11 2012 +0100 +++ b/Modules/_posixsubprocess.c Sat Dec 08 01:17:17 2012 +0100 @@ -321,7 +321,10 @@ /* readdir error, revert behavior. Highly Unlikely. */ _close_fds_by_brute_force(start_fd, end_fd, py_fds_to_keep); } - closedir(proc_fd_dir); + if (closedir(proc_fd_dir) == -1) { + PyErr_SetFromErrno(PyExc_IOError); + return; + } } } diff -r 0acc5626a578 Modules/faulthandler.c --- a/Modules/faulthandler.c Tue Oct 23 22:50:11 2012 +0100 +++ b/Modules/faulthandler.c Sat Dec 08 01:17:17 2012 +0100 @@ -445,7 +445,10 @@ /* get the thread holding the GIL, NULL if no thread hold the GIL */ current = _Py_atomic_load_relaxed(&_PyThreadState_Current); - write(thread.fd, thread.header, thread.header_len); + if (write(thread.fd, thread.header, thread.header_len) == -1) { + PyErr_SetFromErrno(PyExc_IOError); + return; + } errmsg = _Py_DumpTracebackThreads(thread.fd, thread.interp, current); ok = (errmsg == NULL); diff -r 0acc5626a578 Modules/getpath.c --- a/Modules/getpath.c Tue Oct 23 22:50:11 2012 +0100 +++ b/Modules/getpath.c Sat Dec 08 01:17:17 2012 +0100 @@ -271,7 +271,10 @@ int result = 0; /* meaning not found */ char buffer[MAXPATHLEN*2+1]; /* allow extra for key, '=', etc. */ - fseek(env_file, 0, SEEK_SET); + if (fseek(env_file, 0, SEEK_SET) == -1) { + PyErr_SetFromErrno(PyExc_IOError); + return result; + } while (!feof(env_file)) { char * p = fgets(buffer, MAXPATHLEN*2, env_file); wchar_t tmpbuffer[MAXPATHLEN*2+1]; diff -r 0acc5626a578 Modules/mmapmodule.c --- a/Modules/mmapmodule.c Tue Oct 23 22:50:11 2012 +0100 +++ b/Modules/mmapmodule.c Sat Dec 08 01:17:17 2012 +0100 @@ -1322,7 +1322,10 @@ return NULL; } /* Win9x appears to need us seeked to zero */ - lseek(fileno, 0, SEEK_SET); + if (lseek(fileno, 0, SEEK_SET) < 0) { + PyErr_SetFromErrno(PyExc_OSError); + return NULL; + } } m_obj = (mmap_object *)type->tp_alloc(type, 0); diff -r 0acc5626a578 Modules/posixmodule.c --- a/Modules/posixmodule.c Tue Oct 23 22:50:11 2012 +0100 +++ b/Modules/posixmodule.c Sat Dec 08 01:17:17 2012 +0100 @@ -3428,7 +3428,10 @@ Py_BEGIN_ALLOW_THREADS if (fd > -1) rewinddir(dirp); - closedir(dirp); + if (closedir(dirp) == -1) { + PyErr_SetFromErrno(PyExc_IOError); + return list; + } Py_END_ALLOW_THREADS } @@ -5568,10 +5571,19 @@ if (slave_fd < 0) return posix_error(); #if !defined(__CYGWIN__) && !defined(HAVE_DEV_PTC) - ioctl(slave_fd, I_PUSH, "ptem"); /* push ptem */ - ioctl(slave_fd, I_PUSH, "ldterm"); /* push ldterm */ + if (ioctl(slave_fd, I_PUSH, "ptem") == -1) { /* push ptem */ + PyErr_SetFromErrno(PyExc_IOError); + return posix_error(); + } + if (ioctl(slave_fd, I_PUSH, "ldterm") == -1) { /* push ldterm */ + PyErr_SetFromErrno(PyExc_IOError); + return posix_error(); + } #ifndef __hpux - ioctl(slave_fd, I_PUSH, "ttcompat"); /* push ttcompat */ + if (ioctl(slave_fd, I_PUSH, "ttcompat") == -1) { /* push ttcompat */ + PyErr_SetFromErrno(PyExc_IOError); + return posix_error(); + } #endif /* __hpux */ #endif /* HAVE_CYGWIN */ #endif /* HAVE_OPENPTY */ diff -r 0acc5626a578 Modules/signalmodule.c --- a/Modules/signalmodule.c Tue Oct 23 22:50:11 2012 +0100 +++ b/Modules/signalmodule.c Sat Dec 08 01:17:17 2012 +0100 @@ -180,7 +180,10 @@ Handlers[sig_num].tripped = 1; if (wakeup_fd != -1) { byte = (unsigned char)sig_num; - write(wakeup_fd, &byte, 1); + if (write(wakeup_fd, &byte, 1) == -1) { + PyErr_SetFromErrno(PyExc_IOError); + return; + } } if (is_tripped) return; diff -r 0acc5626a578 Modules/socketmodule.c --- a/Modules/socketmodule.c Tue Oct 23 22:50:11 2012 +0100 +++ b/Modules/socketmodule.c Sat Dec 08 01:17:17 2012 +0100 @@ -607,14 +607,20 @@ #ifndef MS_WINDOWS #if defined(__VMS) block = !block; - ioctl(s->sock_fd, FIONBIO, (unsigned int *)&block); + if (ioctl(s->sock_fd, FIONBIO, (unsigned int *)&block) == -1) { + PyErr_SetFromErrno(PyExc_IOError); + return 1; + } #else /* !__VMS */ delay_flag = fcntl(s->sock_fd, F_GETFL, 0); if (block) delay_flag &= (~O_NONBLOCK); else delay_flag |= O_NONBLOCK; - fcntl(s->sock_fd, F_SETFL, delay_flag); + if (fcntl(s->sock_fd, F_SETFL, delay_flag) == -1) { + PyErr_SetFromErrno(PyExc_IOError); + return 1; + } #endif /* !__VMS */ #else /* MS_WINDOWS */ block = !block; diff -r 0acc5626a578 Python/marshal.c --- a/Python/marshal.c Tue Oct 23 22:50:11 2012 +0100 +++ b/Python/marshal.c Sat Dec 08 01:17:17 2012 +0100 @@ -98,7 +98,10 @@ w_string(char *s, int n, WFILE *p) { if (p->fp != NULL) { - fwrite(s, 1, n, p->fp); + if (fwrite(s, 1, n, p->fp) == -1) { + PyErr_SetFromErrno(PyExc_IOError); + return; + } } else { while (--n >= 0) { diff -r 0acc5626a578 Python/traceback.c --- a/Python/traceback.c Tue Oct 23 22:50:11 2012 +0100 +++ b/Python/traceback.c Sat Dec 08 01:17:17 2012 +0100 @@ -257,7 +257,10 @@ fd = PyObject_AsFileDescriptor(binary); found_encoding = PyTokenizer_FindEncodingFilename(fd, filename); encoding = (found_encoding != NULL) ? found_encoding : "utf-8"; - lseek(fd, 0, 0); /* Reset position */ + if (lseek(fd, 0, 0) == -1) { /* Reset position */ + PyErr_SetFromErrno(PyExc_IOError); + return -1; + } fob = _PyObject_CallMethodId(io, &PyId_TextIOWrapper, "Os", binary, encoding); Py_DECREF(io); Py_DECREF(binary); @@ -455,7 +458,10 @@ len++; } while (value); reverse_string(buffer, len); - write(fd, buffer, len); + if (write(fd, buffer, len) == -1) { + PyErr_SetFromErrno(PyExc_IOError); + return; + } } /* Format an integer in range [0; 0xffffffff] to hexdecimal of 'width' digits, @@ -475,7 +481,11 @@ len++; } while (len < width || value); reverse_string(buffer, len); - write(fd, buffer, len); + if (write(fd, buffer, len) == -1) { + PyErr_SetFromErrno(PyExc_IOError); + return; + } + } /* Write an unicode object into the file fd using ascii+backslashreplace. @@ -527,7 +537,11 @@ ch = wstr[i]; if (ch < 128) { char c = (char)ch; - write(fd, &c, 1); + if (write(fd, &c, 1) == -1) { + PyErr_SetFromErrno(PyExc_IOError); + return; + } + } else if (ch < 0xff) { PUTS(fd, "\\x"); @@ -561,9 +575,17 @@ if (code != NULL && code->co_filename != NULL && PyUnicode_Check(code->co_filename)) { - write(fd, "\"", 1); + if (write(fd, "\"", 1)) { + PyErr_SetFromErrno(PyExc_IOError); + return; + } + dump_ascii(fd, code->co_filename); - write(fd, "\"", 1); + + if (write(fd, "\"", 1)) { + PyErr_SetFromErrno(PyExc_IOError); + return; + } } else { PUTS(fd, "???"); } @@ -580,7 +602,10 @@ else PUTS(fd, "???"); - write(fd, "\n", 1); + if (write(fd, "\n", 1)) { + PyErr_SetFromErrno(PyExc_IOError); + return; + } } static void @@ -649,8 +674,13 @@ nthreads = 0; do { - if (nthreads != 0) - write(fd, "\n", 1); + if (nthreads != 0) { + if (write(fd, "\"", 1) == -1) { + PyErr_SetFromErrno(PyExc_IOError); + return; + } + } + if (nthreads >= MAX_NTHREADS) { PUTS(fd, "...\n"); break;