New submission from Dima Tisnek: os.fdopen() should either: * consume file descriptor and return file/io object, or * leave file descriptor alone and raise an exception
this invariant is broken in the following test case: fd = os.open("/", os.O_RDONLY) try: obj = os.fdopen(fd, "r") except EnvironmentError: os.close(fd) # cleanup what happens: fd = os.open("/", os.O_RDONLY) --> some fd os.fdopen(fd, "r") --> exception, fd refers to a directory os.close(fd) --> exception, no such fd For reference: 1. invariant is held in Python 3.3. 2. following positive test case works correctly fd = os.open("/etc/passwd", os.O_RDONLY) try: obj = os.fdopen(fd, "r") # success except EnvironmentError: os.close(fd) # not reached 3. following negative test case works correctly fd = os.open("/etc/passwd", os.O_RDONLY) try: obj = os.fdopen(fd, "w") # wrong mode on purpose except EnvironmentError: os.close(fd) # closed ok ---------- components: IO messages: 215832 nosy: Dima.Tisnek priority: normal severity: normal status: open title: os.fdopen() may eat file descriptor and still raise exception type: resource usage versions: Python 2.7 _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue21191> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com