Author: Brian Kearns <[email protected]>
Branch: 
Changeset: r70001:13377182ed09
Date: 2014-03-17 00:53 -0400
http://bitbucket.org/pypy/pypy/changeset/13377182ed09/

Log:    fix socket exception type for overflowing port/flowinfo

diff --git a/pypy/module/_socket/interp_socket.py 
b/pypy/module/_socket/interp_socket.py
--- a/pypy/module/_socket/interp_socket.py
+++ b/pypy/module/_socket/interp_socket.py
@@ -65,10 +65,7 @@
         else:                 flowinfo = 0
         if len(pieces_w) > 3: scope_id = space.uint_w(pieces_w[3])
         else:                 scope_id = 0
-        if flowinfo < 0 or flowinfo > 0xfffff:
-            raise OperationError(space.w_OverflowError, space.wrap(
-                "flowinfo must be 0-1048575."))
-        flowinfo = rffi.cast(lltype.Unsigned, flowinfo)
+        flowinfo = make_unsigned_flowinfo(space, flowinfo)
         a = addr.lock(_c.sockaddr_in6)
         rffi.setintfield(a, 'c_sin6_port', rsocket.htons(port))
         rffi.setintfield(a, 'c_sin6_flowinfo', rsocket.htonl(flowinfo))
@@ -97,10 +94,7 @@
         else:                 flowinfo = 0
         if len(pieces_w) > 3: scope_id = space.uint_w(pieces_w[3])
         else:                 scope_id = 0
-        if flowinfo < 0 or flowinfo > 0xfffff:
-            raise OperationError(space.w_OverflowError, space.wrap(
-                "flowinfo must be 0-1048575."))
-        flowinfo = rffi.cast(lltype.Unsigned, flowinfo)
+        flowinfo = make_unsigned_flowinfo(space, flowinfo)
         return rsocket.INET6Address(host, port, flowinfo, scope_id)
     if rsocket.HAS_AF_UNIX and family == rsocket.AF_UNIX:
         return rsocket.UNIXAddress(space.str_w(w_address))
@@ -112,10 +106,16 @@
 # XXX Hack to seperate rpython and pypy
 def make_ushort_port(space, port):
     if port < 0 or port > 0xffff:
-        raise OperationError(space.w_ValueError, space.wrap(
+        raise OperationError(space.w_OverflowError, space.wrap(
             "port must be 0-65535."))
     return rffi.cast(rffi.USHORT, port)
 
+def make_unsigned_flowinfo(space, flowinfo):
+    if flowinfo < 0 or flowinfo > 0xfffff:
+        raise OperationError(space.w_OverflowError, space.wrap(
+            "flowinfo must be 0-1048575."))
+    return rffi.cast(lltype.Unsigned, flowinfo)
+
 # XXX Hack to seperate rpython and pypy
 def ipaddr_from_object(space, w_sockaddr):
     host = space.str_w(space.getitem(w_sockaddr, space.wrap(0)))
diff --git a/pypy/module/_socket/test/test_sock_app.py 
b/pypy/module/_socket/test/test_sock_app.py
--- a/pypy/module/_socket/test/test_sock_app.py
+++ b/pypy/module/_socket/test/test_sock_app.py
@@ -425,8 +425,13 @@
     def test_bigport(self):
         import _socket
         s = _socket.socket()
-        raises(ValueError, s.connect, ("localhost", 1000000))
-        raises(ValueError, s.connect, ("localhost", -1))
+        exc = raises(OverflowError, s.connect, ("localhost", -1))
+        assert "port must be 0-65535." in str(exc.value)
+        exc = raises(OverflowError, s.connect, ("localhost", 1000000))
+        assert "port must be 0-65535." in str(exc.value)
+        s = _socket.socket(_socket.AF_INET6)
+        exc = raises(OverflowError, s.connect, ("::1", 1234, 1048576))
+        assert "flowinfo must be 0-1048575." in str(exc.value)
 
     def test_NtoH(self):
         import sys
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to