[pypy-commit] pypy default: avoid _get_osfhandle from crashing on invalid fds
pjenvey
noreply at buildbot.pypy.org
Wed Apr 24 00:31:42 CEST 2013
Author: Philip Jenvey <pjenvey at underboss.org>
Branch:
Changeset: r63573:983d6e1ef146
Date: 2013-04-23 15:28 -0700
http://bitbucket.org/pypy/pypy/changeset/983d6e1ef146/
Log: avoid _get_osfhandle from crashing on invalid fds
diff --git a/lib-python/2.7/test/test_fileio.py b/lib-python/2.7/test/test_fileio.py
--- a/lib-python/2.7/test/test_fileio.py
+++ b/lib-python/2.7/test/test_fileio.py
@@ -318,7 +318,6 @@
self.assertRaises(ValueError, _FileIO, -10)
self.assertRaises(OSError, _FileIO, make_bad_fd())
if sys.platform == 'win32':
- raise unittest.SkipTest('Set _invalid_parameter_handler for low level io')
import msvcrt
self.assertRaises(IOError, msvcrt.get_osfhandle, make_bad_fd())
diff --git a/lib_pypy/msvcrt.py b/lib_pypy/msvcrt.py
--- a/lib_pypy/msvcrt.py
+++ b/lib_pypy/msvcrt.py
@@ -8,25 +8,37 @@
# PAC: 2010/08 added MS locking for Whoosh
import ctypes
+import errno
from ctypes_support import standard_c_lib as _c
from ctypes_support import get_errno
-import errno
try:
open_osfhandle = _c._open_osfhandle
except AttributeError: # we are not on windows
raise ImportError
-try: from __pypy__ import builtinify
-except ImportError: builtinify = lambda f: f
+try: from __pypy__ import builtinify, validate_fd
+except ImportError: builtinify = validate_fd = lambda f: f
open_osfhandle.argtypes = [ctypes.c_int, ctypes.c_int]
open_osfhandle.restype = ctypes.c_int
-get_osfhandle = _c._get_osfhandle
-get_osfhandle.argtypes = [ctypes.c_int]
-get_osfhandle.restype = ctypes.c_int
+_get_osfhandle = _c._get_osfhandle
+_get_osfhandle.argtypes = [ctypes.c_int]
+_get_osfhandle.restype = ctypes.c_int
+
+ at builtinify
+def get_osfhandle(fd):
+ """"get_osfhandle(fd) -> file handle
+
+ Return the file handle for the file descriptor fd. Raises IOError if
+ fd is not recognized."""
+ try:
+ validate_fd(fd)
+ except OSError as e:
+ raise IOError(*e.args)
+ return _get_osfhandle(fd)
setmode = _c._setmode
setmode.argtypes = [ctypes.c_int, ctypes.c_int]
More information about the pypy-commit
mailing list