[tor-commits] [stem/master] Better validation of controller's from_port() function

atagar at torproject.org atagar at torproject.org
Wed Aug 22 01:12:46 UTC 2012


commit a6c5a063d1f963a53e012b4c31478f90dea0d795
Author: Damian Johnson <atagar at torproject.org>
Date:   Fri Aug 17 10:24:16 2012 -0700

    Better validation of controller's from_port() function
    
    I scratched my head due to an awefully misleading stacktrace when I passed a
    port value into the method's argument slot. Validating the inputs to avoid
    having this cause confusion in the future.
    
    Before:
    
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "test/prompt.py", line 67, in controller
        controller = stem.control.Controller.from_port(CONTROL_PORT)
      File "stem/control.py", line 457, in from_port
        control_port = stem.socket.ControlPort(control_addr, control_port)
      File "stem/socket.py", line 287, in __init__
        if connect: self.connect()
      File "stem/socket.py", line 171, in connect
        self._socket = self._make_socket()
      File "stem/socket.py", line 311, in _make_socket
        control_socket.connect((self._control_addr, str(self._control_port)))
      File "/usr/lib/python2.7/socket.py", line 224, in meth
        return getattr(self._sock,name)(*args)
    TypeError: coercing to Unicode: need string or buffer, int found
    
    After:
    
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "test/prompt.py", line 67, in controller
        controller = stem.control.Controller.from_port(CONTROL_PORT)
      File "stem/control.py", line 459, in from_port
        raise ValueError("Invalid ip address: %s" % control_addr)
    ValueError: Invalid ip address: 2779
---
 stem/control.py         |    6 ++++++
 stem/util/connection.py |    2 ++
 2 files changed, 8 insertions(+), 0 deletions(-)

diff --git a/stem/control.py b/stem/control.py
index aca6f41..dd5f812 100644
--- a/stem/control.py
+++ b/stem/control.py
@@ -48,6 +48,7 @@ import threading
 import stem.response
 import stem.socket
 import stem.version
+import stem.util.connection
 import stem.util.log as log
 
 # state changes a control socket can have
@@ -454,6 +455,11 @@ class Controller(BaseController):
     :raises: :class:`stem.socket.SocketError` if we're unable to establish a connection
     """
     
+    if not stem.util.connection.is_valid_ip_address(control_addr):
+      raise ValueError("Invalid IP address: %s" % control_addr)
+    elif not stem.util.connection.is_valid_port(control_port):
+      raise ValueError("Invalid port: %s" % control_port)
+    
     control_port = stem.socket.ControlPort(control_addr, control_port)
     return Controller(control_port)
   
diff --git a/stem/util/connection.py b/stem/util/connection.py
index eda3569..02201bb 100644
--- a/stem/util/connection.py
+++ b/stem/util/connection.py
@@ -39,6 +39,8 @@ def is_valid_ip_address(address):
   :returns: True if input is a valid IPv4 address, False otherwise
   """
   
+  if not isinstance(address, str): return False
+  
   # checks if theres four period separated values
   if address.count(".") != 3: return False
   





More information about the tor-commits mailing list