[pypy-commit] pypy stdlib-2.7.3: CPython Issue #9975: socket: Fix incorrect use of flowinfo and scope_id.

amauryfa noreply at buildbot.pypy.org
Thu Jun 14 01:22:45 CEST 2012


Author: Amaury Forgeot d'Arc <amauryfa at gmail.com>
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()
 


More information about the pypy-commit mailing list