summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Heimes <christian@cheimes.de>2013-07-21 00:12:35 (GMT)
committerChristian Heimes <christian@cheimes.de>2013-07-21 00:12:35 (GMT)
commit1f34729f42c0f386c5c95580ba736fd9758cf9a2 (patch)
treea5074744d2c260c19b4296ddce1f865de7c231f6
parentc731bbe66545101069980fff4b89c45614b6fa9c (diff)
downloadcpython-1f34729f42c0f386c5c95580ba736fd9758cf9a2.zip
cpython-1f34729f42c0f386c5c95580ba736fd9758cf9a2.tar.gz
cpython-1f34729f42c0f386c5c95580ba736fd9758cf9a2.tar.bz2
Check return value of lseek() in _Py_DisplaySourceLine().
Also use portable SEEK_SET instead of 0. CID 1040639
-rw-r--r--Python/traceback.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/Python/traceback.c b/Python/traceback.c
index c37aab0..1f611ba 100644
--- a/Python/traceback.c
+++ b/Python/traceback.c
@@ -262,7 +262,13 @@ _Py_DisplaySourceLine(PyObject *f, PyObject *filename, int lineno, int indent)
}
found_encoding = PyTokenizer_FindEncodingFilename(fd, filename);
encoding = (found_encoding != NULL) ? found_encoding : "utf-8";
- lseek(fd, 0, 0); /* Reset position */
+ /* Reset position */
+ if (lseek(fd, 0, SEEK_SET) == (off_t)-1) {
+ Py_DECREF(io);
+ Py_DECREF(binary);
+ PyMem_FREE(found_encoding);
+ return PyErr_SetFromErrnoWithFilenameObject(PyExc_IOError, filename);
+ }
fob = _PyObject_CallMethodId(io, &PyId_TextIOWrapper, "Os", binary, encoding);
Py_DECREF(io);
Py_DECREF(binary);