Author: Amaury Forgeot d'Arc <[email protected]>
Branch: stdlib-2.7.3
Changeset: r55658:34745c46092a
Date: 2012-06-14 01:22 +0200
http://bitbucket.org/pypy/pypy/changeset/34745c46092a/

Log:    CPython Issue #9975: socket: Fix incorrect use of flowinfo and
        scope_id.

diff --git a/pypy/rlib/rsocket.py b/pypy/rlib/rsocket.py
--- a/pypy/rlib/rsocket.py
+++ b/pypy/rlib/rsocket.py
@@ -355,7 +355,7 @@
         makeipaddr(host, self)
         a = self.lock(_c.sockaddr_in6)
         rffi.setintfield(a, 'c_sin6_port', htons(port))
-        rffi.setintfield(a, 'c_sin6_flowinfo', flowinfo)
+        rffi.setintfield(a, 'c_sin6_flowinfo', htonl(flowinfo))
         rffi.setintfield(a, 'c_sin6_scope_id', scope_id)
         self.unlock()
 
@@ -376,7 +376,7 @@
 
     def get_flowinfo(self):
         a = self.lock(_c.sockaddr_in6)
-        flowinfo = a.c_sin6_flowinfo
+        flowinfo = ntohl(a.c_sin6_flowinfo)
         self.unlock()
         return rffi.cast(lltype.Unsigned, flowinfo)
 
@@ -412,6 +412,9 @@
         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."))
         return INET6Address(host, port, flowinfo, scope_id)
     from_object = staticmethod(from_object)
 
@@ -428,9 +431,12 @@
         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."))
         a = self.lock(_c.sockaddr_in6)
         rffi.setintfield(a, 'c_sin6_port', htons(port))
-        rffi.setintfield(a, 'c_sin6_flowinfo', flowinfo)
+        rffi.setintfield(a, 'c_sin6_flowinfo', htonl(flowinfo))
         rffi.setintfield(a, 'c_sin6_scope_id', scope_id)
         self.unlock()
 
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to