[tor-commits] [stem/master] Bytes/unicode normalization for tor_tools didn't work for python3

atagar at torproject.org atagar at torproject.org
Sat Nov 4 18:53:38 UTC 2017


commit a31af967594047963a4344e9c9143c184c3d341f
Author: Damian Johnson <atagar at torproject.org>
Date:   Sat Nov 4 11:54:41 2017 -0700

    Bytes/unicode normalization for tor_tools didn't work for python3
    
    We added unit tests to check that tor_tools functions like
    is_valid_fingerprint() worked for both bytes and unicode, but these tests
    actually only passes for python 2.x. With python3 they only accepted unicode.
    Normalizing the inputs.
---
 stem/util/tor_tools.py | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/stem/util/tor_tools.py b/stem/util/tor_tools.py
index 424797b1..afb2e12e 100644
--- a/stem/util/tor_tools.py
+++ b/stem/util/tor_tools.py
@@ -21,6 +21,8 @@ Miscellaneous utility functions for working with tor.
 
 import re
 
+import stem.util.str_tools
+
 # The control-spec defines the following as...
 #
 #   Fingerprint = "$" 40*HEXDIG
@@ -54,6 +56,9 @@ def is_valid_fingerprint(entry, check_prefix = False):
   :returns: **True** if the string could be a relay fingerprint, **False** otherwise
   """
 
+  if isinstance(entry, bytes):
+    entry = stem.util.str_tools._to_unicode(entry)
+
   try:
     if check_prefix:
       if not entry or entry[0] != '$':
@@ -75,6 +80,9 @@ def is_valid_nickname(entry):
   :returns: **True** if the string could be a nickname, **False** otherwise
   """
 
+  if isinstance(entry, bytes):
+    entry = stem.util.str_tools._to_unicode(entry)
+
   try:
     return bool(NICKNAME_PATTERN.match(entry))
   except TypeError:
@@ -88,6 +96,9 @@ def is_valid_circuit_id(entry):
   :returns: **True** if the string could be a circuit id, **False** otherwise
   """
 
+  if isinstance(entry, bytes):
+    entry = stem.util.str_tools._to_unicode(entry)
+
   try:
     return bool(CIRC_ID_PATTERN.match(entry))
   except TypeError:
@@ -124,6 +135,9 @@ def is_valid_hidden_service_address(entry):
   :returns: **True** if the string could be a hidden service address, **False** otherwise
   """
 
+  if isinstance(entry, bytes):
+    entry = stem.util.str_tools._to_unicode(entry)
+
   try:
     return bool(HS_ADDRESS_PATTERN.match(entry))
   except TypeError:



More information about the tor-commits mailing list