[pypy-commit] pypy py3k: fix getnameinfo's handling of ipv6 addrs

pjenvey noreply at buildbot.pypy.org
Thu Feb 21 01:15:30 CET 2013


Author: Philip Jenvey <pjenvey at underboss.org>
Branch: py3k
Changeset: r61517:073c18fd3eb3
Date: 2013-02-20 16:13 -0800
http://bitbucket.org/pypy/pypy/changeset/073c18fd3eb3/

Log:	fix getnameinfo's handling of ipv6 addrs

diff --git a/pypy/module/_socket/interp_func.py b/pypy/module/_socket/interp_func.py
--- a/pypy/module/_socket/interp_func.py
+++ b/pypy/module/_socket/interp_func.py
@@ -1,6 +1,6 @@
 from pypy.interpreter.gateway import unwrap_spec, WrappedDefault
 from pypy.module._socket.interp_socket import (
-    converted_error, W_RSocket, addr_as_object, ipaddr_from_object, get_error)
+    converted_error, W_RSocket, addr_as_object, fill_from_object, get_error)
 from rpython.rlib import rsocket
 from rpython.rlib.rsocket import SocketError, INVALID_SOCKET
 from pypy.interpreter.error import OperationError
@@ -121,9 +121,8 @@
 
     Get host and port for a sockaddr."""
     try:
-        w_host, w_port = space.fixedview(w_sockaddr, 2)
-        host = space.str_w(w_host)
-        port = str(space.int_w(w_port))
+        host = space.str_w((space.getitem(w_sockaddr, space.wrap(0))))
+        port = str(space.int_w(space.getitem(w_sockaddr, space.wrap(1))))
         lst = rsocket.getaddrinfo(host, port, rsocket.AF_UNSPEC,
                                   rsocket.SOCK_DGRAM, 0,
                                   rsocket.AI_NUMERICHOST)
@@ -132,6 +131,7 @@
                 get_error(space, 'error'),
                 space.wrap("sockaddr resolved to multiple addresses"))
         addr = lst[0][4]
+        fill_from_object(addr, space, w_sockaddr)
         host, servport = rsocket.getnameinfo(addr, flags)
     except SocketError, e:
         raise converted_error(space, e)
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
@@ -273,7 +273,12 @@
     space.raises_w(get_error(space, 'error'), space.appexec,
                    [w_socket, sockaddr, space.wrap(0)],
                    "(_socket, sockaddr, flags): return _socket.getnameinfo(sockaddr, flags)")
-
+    if socket.has_ipv6:
+        sockaddr = space.newtuple([space.wrap('::1'), space.wrap(0),
+                                   space.wrap(0xffffffff)])
+        space.raises_w(space.w_OverflowError, space.appexec,
+                       [w_socket, sockaddr, space.wrap(0)],
+                       "(_socket, sockaddr, flags): return _socket.getnameinfo(sockaddr, flags)")
 
 def test_timeout():
     space.appexec([w_socket, space.wrap(25.4)],


More information about the pypy-commit mailing list