eryksun added the comment: > It is not clear why the absence of _setmode(fd, os.O_BINARY) > is not detected by tests.
It's only a problem when an existing text-mode file descriptor is passed in. For example, in text mode the CRT handles b'\x1a' as an EOF marker: Python 3.5.0b4 (v3.5.0b4:c0d641054635, Jul 26 2015, 07:11:12) [MSC v.1900 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import os, _pyio >>> _ = open('testfile', 'wb').write(b'abc\x1adef') >>> fd = os.open('testfile', os.O_RDONLY|os.O_TEXT) >>> f = _pyio.open(fd, 'rb') >>> f.read() b'abc' >>> f.close() >>> f = _pyio.open('testfile', 'rb') >>> f.read() b'abc\x1adef' The setmode call ensures a file descriptor is in the expected binary mode: >>> import msvcrt >>> fd = os.open('testfile', os.O_RDONLY|os.O_TEXT) >>> old_mode = msvcrt.setmode(fd, os.O_BINARY) >>> old_mode == os.O_TEXT True >>> f = _pyio.open(fd, 'rb') >>> f.read() b'abc\x1adef' ---------- nosy: +eryksun _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue24881> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com