commit 801ceb20f5cb113253d88956fac9a9501ce2521e Author: Damian Johnson atagar@torproject.org Date: Wed Feb 7 12:27:43 2018 -0800
Validate address before connecting
Oops, the Address constructor indeed validates addresses *but* it was called after we established a socket. As such our integ tests failed with...
====================================================================== ERROR: test_invalid_arguments ---------------------------------------------------------------------- Traceback (most recent call last): File "/srv/jenkins-workspace/workspace/stem-tor-ci/test/integ/client/connection.py", line 20, in test_invalid_arguments self.assertRaisesRegexp(ValueError, "'nope' isn't an IPv4 or IPv6 address", Relay.connect, 'nope', 80) File "/srv/jenkins-workspace/workspace/stem-tor-ci/stem/util/test_tools.py", line 278, in assertRaisesRegexp return super(original_type, self).assertRaisesRegexp(exc_type, exc_msg, func, *args, **kwargs) File "/usr/lib/python2.7/unittest/case.py", line 993, in assertRaisesRegexp callable_obj(*args, **kwargs) File "/srv/jenkins-workspace/workspace/stem-tor-ci/stem/client/__init__.py", line 80, in connect conn = stem.socket.RelaySocket(address, port) File "/srv/jenkins-workspace/workspace/stem-tor-ci/stem/socket.py", line 378, in __init__ self.connect() File "/srv/jenkins-workspace/workspace/stem-tor-ci/stem/socket.py", line 177, in connect self._socket = self._make_socket() File "/srv/jenkins-workspace/workspace/stem-tor-ci/stem/socket.py", line 418, in _make_socket raise stem.SocketError(exc) SocketError: [Errno -2] Name or service not known
---------------------------------------------------------------------- --- stem/client/__init__.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/stem/client/__init__.py b/stem/client/__init__.py index 2b853baa..340082c7 100644 --- a/stem/client/__init__.py +++ b/stem/client/__init__.py @@ -71,6 +71,8 @@ class Relay(object): * :class:`stem.SocketError` if we're unable to establish a connection """
+ relay_addr = Address(address) + if not stem.util.connection.is_valid_port(port): raise ValueError("'%s' isn't a valid port" % port) elif not link_protocols: @@ -108,7 +110,7 @@ class Relay(object): # where it would help.
link_protocol = max(common_protocols) - conn.send(stem.client.cell.NetinfoCell(Address(address), []).pack(link_protocol)) + conn.send(stem.client.cell.NetinfoCell(relay_addr, []).pack(link_protocol))
return Relay(conn, link_protocol)
tor-commits@lists.torproject.org