diff -r a32a3b79f5e8 Misc/ACKS --- a/Misc/ACKS Sun May 12 17:29:34 2013 +0300 +++ b/Misc/ACKS Wed May 15 11:46:45 2013 +0300 @@ -693,6 +693,7 @@ Dom Mitchell Florian Mladitsch Doug Moen +Jaakko Moisio The Dragon De Monsyne Skip Montanaro Paul Moore diff -r a32a3b79f5e8 Misc/NEWS --- a/Misc/NEWS Sun May 12 17:29:34 2013 +0300 +++ b/Misc/NEWS Wed May 15 11:46:45 2013 +0300 @@ -35,6 +35,9 @@ - Issue #17610: Don't rely on non-standard behavior of the C qsort() function. +- Issue #17976: Fixed potential problem with file_write not detecting IO error + by inspecting the return value of fwrite. + Library ------- diff -r a32a3b79f5e8 Objects/fileobject.c --- a/Objects/fileobject.c Sun May 12 17:29:34 2013 +0300 +++ b/Objects/fileobject.c Wed May 15 11:46:45 2013 +0300 @@ -1804,6 +1804,7 @@ const char *s; Py_ssize_t n, n2; PyObject *encoded = NULL; + int err_flag = 0, err; if (f->f_fp == NULL) return err_closed(); @@ -1849,11 +1850,16 @@ FILE_BEGIN_ALLOW_THREADS(f) errno = 0; n2 = fwrite(s, 1, n, f->f_fp); + if (n2 != n || ferror(f->f_fp)) { + err_flag = 1; + err = errno; + } FILE_END_ALLOW_THREADS(f) Py_XDECREF(encoded); if (f->f_binary) PyBuffer_Release(&pbuf); - if (n2 != n) { + if (err_flag) { + errno = err; PyErr_SetFromErrno(PyExc_IOError); clearerr(f->f_fp); return NULL;