[pypy-commit] pypy stdlib-2.7.4-poll-fix: fixed support for select.poll in stdlib 2.7.4

andrewsmedina noreply at buildbot.pypy.org
Sat Aug 17 00:46:07 CEST 2013


Author: Andrews Medina <andrewsmedina at gmail.com>
Branch: stdlib-2.7.4-poll-fix
Changeset: r66173:1922d4a83a50
Date: 2013-08-14 23:16 -0300
http://bitbucket.org/pypy/pypy/changeset/1922d4a83a50/

Log:	fixed support for select.poll in stdlib 2.7.4

diff --git a/pypy/module/select/interp_select.py b/pypy/module/select/interp_select.py
--- a/pypy/module/select/interp_select.py
+++ b/pypy/module/select/interp_select.py
@@ -22,6 +22,9 @@
 
     @unwrap_spec(events=int)
     def register(self, space, w_fd, events=defaultevents):
+        if events > 32767:
+            msg = "signed short integer is greater than maximum"
+            raise OperationError(space.w_OverflowError, space.wrap(msg))
         fd = space.c_filedescriptor_w(w_fd)
         self.fddict[fd] = events
 
@@ -55,6 +58,10 @@
                 raise OperationError(space.w_ValueError,
                                      space.wrap("math range error"))
 
+        if timeout > 2147483647:
+            msg = "Python int too large to convert to C int"
+            raise OperationError(space.w_OverflowError, space.wrap(msg))
+
         try:
             retval = rpoll.poll(self.fddict, timeout)
         except rpoll.PollError, e:
diff --git a/pypy/module/select/test/test_select.py b/pypy/module/select/test/test_select.py
--- a/pypy/module/select/test/test_select.py
+++ b/pypy/module/select/test/test_select.py
@@ -213,6 +213,20 @@
             readend.close()
             writeend.close()
 
+    def test_poll_int_overflow(self):
+        import select
+
+        pollster = select.poll()
+        pollster.register(1)
+
+        raises(OverflowError, pollster.poll, 1L << 64)
+
+        pollster = select.poll()
+        raises(OverflowError, pollster.register, 0, 32768) # SHRT_MAX + 1
+        raises(OverflowError, pollster.register, 0, 65535) # USHRT_MAX + 1
+        raises(OverflowError, pollster.poll, 2147483648) # INT_MAX +  1
+        raises(OverflowError, pollster.poll, 4294967296) # UINT_MAX + 1
+
 
 class AppTestSelectWithPipes(_AppTestSelect):
     "Use a pipe to get pairs of file descriptors"


More information about the pypy-commit mailing list