diff options
author | Kristján Valur Jónsson <kristjan@ccpgames.com> | 2008-12-18 17:15:54 (GMT) |
---|---|---|
committer | Kristján Valur Jónsson <kristjan@ccpgames.com> | 2008-12-18 17:15:54 (GMT) |
commit | 19288c247ad585f7a5487d2e5d3f9d50887a19ba (patch) | |
tree | 2a04bf09d666431b62e92bb7bd9951515f10b5ff /Parser | |
parent | baa4546b02e776d60e3f5d8261ff88f03550b230 (diff) | |
download | cpython-19288c247ad585f7a5487d2e5d3f9d50887a19ba.zip cpython-19288c247ad585f7a5487d2e5d3f9d50887a19ba.tar.gz cpython-19288c247ad585f7a5487d2e5d3f9d50887a19ba.tar.bz2 |
Fix an issue in the tokenizer, where a file is opened by fd, but the underlying PyFileIO object wasn created with the closefd attribute true.
Also fix error handling for close() int _fileio.c . It was incorrect, looking for a negative refcount, and so errors weren't raised. This is why this issue wasn't caught.
There is a second reason why it isn't seen: Class IOBase in io.py has a try:/except: around the close() funtion in the __del__() method. This also masks these error conditions.
This issue was discovered by removing the _set_invalid_parameter_handler() fiddling, thus enabling the C runtime checks on windows.
Diffstat (limited to 'Parser')
-rw-r--r-- | Parser/tokenizer.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/Parser/tokenizer.c b/Parser/tokenizer.c index ce8129d..3d52bed 100644 --- a/Parser/tokenizer.c +++ b/Parser/tokenizer.c @@ -452,8 +452,8 @@ fp_setreadl(struct tok_state *tok, const char* enc) stream = PyObject_CallMethod(io, "open", "ssis", tok->filename, "r", -1, enc); else - stream = PyObject_CallMethod(io, "open", "isis", - fileno(tok->fp), "r", -1, enc); + stream = PyObject_CallMethod(io, "open", "isisOOO", + fileno(tok->fp), "r", -1, enc, Py_None, Py_None, Py_False); if (stream == NULL) goto cleanup; |