Author: Armin Rigo <[email protected]>
Branch: py3.5
Changeset: r89471:f9c35809153c
Date: 2017-01-10 12:20 +0100
http://bitbucket.org/pypy/pypy/changeset/f9c35809153c/
Log: Check that the 'opener' of the file constructors don't return a
negative fd
diff --git a/pypy/module/_io/interp_fileio.py b/pypy/module/_io/interp_fileio.py
--- a/pypy/module/_io/interp_fileio.py
+++ b/pypy/module/_io/interp_fileio.py
@@ -194,6 +194,11 @@
w_fd = space.call_function(w_opener, w_name, space.wrap(flags))
try:
self.fd = space.int_w(w_fd)
+ if self.fd < 0:
+ # The opener returned a negative result instead
+ # of raising an exception
+ raise oefmt(space.w_ValueError,
+ "opener returned %d", self.fd)
fd_is_own = True
except OperationError as e:
if not e.match(space, space.w_TypeError):
diff --git a/pypy/module/_io/test/test_fileio.py
b/pypy/module/_io/test/test_fileio.py
--- a/pypy/module/_io/test/test_fileio.py
+++ b/pypy/module/_io/test/test_fileio.py
@@ -282,6 +282,12 @@
if fd1 != fd2:
raises(OSError, posix.close, fd1)
+ def test_opener_negative(self):
+ import _io
+ def opener(*args):
+ return -1
+ raises(ValueError, _io.FileIO, "foo", 'r', opener=opener)
+
def test_flush_at_exit():
from pypy import conftest
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit