[tor-commits] [stem/master] Processing controller descriptors as bytes
atagar at torproject.org
atagar at torproject.org
Wed May 22 05:01:53 UTC 2013
commit ad82c905347f3e5849930fdb3e63721b294d38b4
Author: Damian Johnson <atagar at torproject.org>
Date: Tue May 21 21:30:49 2013 -0700
Processing controller descriptors as bytes
When descriptor content was fetched by the Controller it was first converted to
unicode, then back into bytes. As a result descriptors with content that
couldn't be converted (usually on the contact line) got mangled, and this in
turn caused our check of its signature to fail.
Caught thanks to aj00200 on...
https://trac.torproject.org/8755
---
stem/control.py | 23 ++++++++++++-----------
test/mocking.py | 2 +-
2 files changed, 13 insertions(+), 12 deletions(-)
diff --git a/stem/control.py b/stem/control.py
index 9ea77f8..6ec0006 100644
--- a/stem/control.py
+++ b/stem/control.py
@@ -151,11 +151,12 @@ import stem.response.events
import stem.socket
import stem.util.connection
import stem.util.enum
+import stem.util.str_tools
import stem.util.tor_tools
import stem.version
from stem import UNDEFINED, CircStatus, Signal
-from stem.util import log, str_tools
+from stem.util import log
# state changes a control socket can have
@@ -1018,8 +1019,8 @@ class Controller(BaseController):
else:
raise ValueError("'%s' isn't a valid fingerprint or nickname" % relay)
- desc_content = self.get_info(query)
- return stem.descriptor.microdescriptor.Microdescriptor(str_tools._to_bytes(desc_content))
+ desc_content = self.get_info(query, get_bytes = True)
+ return stem.descriptor.microdescriptor.Microdescriptor(desc_content)
except Exception as exc:
if default == UNDEFINED:
raise exc
@@ -1107,8 +1108,8 @@ class Controller(BaseController):
else:
raise ValueError("'%s' isn't a valid fingerprint or nickname" % relay)
- desc_content = self.get_info(query)
- return stem.descriptor.server_descriptor.RelayDescriptor(str_tools._to_bytes(desc_content))
+ desc_content = self.get_info(query, get_bytes = True)
+ return stem.descriptor.server_descriptor.RelayDescriptor(desc_content)
except Exception as exc:
if default == UNDEFINED:
raise exc
@@ -1141,9 +1142,9 @@ class Controller(BaseController):
#
# https://trac.torproject.org/8248
- desc_content = self.get_info("desc/all-recent")
+ desc_content = self.get_info("desc/all-recent", get_bytes = True)
- for desc in stem.descriptor.server_descriptor._parse_file(io.BytesIO(str_tools._to_bytes(desc_content))):
+ for desc in stem.descriptor.server_descriptor._parse_file(io.BytesIO(desc_content)):
yield desc
except Exception as exc:
if default == UNDEFINED:
@@ -1186,8 +1187,8 @@ class Controller(BaseController):
else:
raise ValueError("'%s' isn't a valid fingerprint or nickname" % relay)
- desc_content = self.get_info(query)
- return stem.descriptor.router_status_entry.RouterStatusEntryV2(str_tools._to_bytes(desc_content))
+ desc_content = self.get_info(query, get_bytes = True)
+ return stem.descriptor.router_status_entry.RouterStatusEntryV2(desc_content)
except Exception as exc:
if default == UNDEFINED:
raise exc
@@ -1215,10 +1216,10 @@ class Controller(BaseController):
#
# https://trac.torproject.org/8248
- desc_content = self.get_info("ns/all")
+ desc_content = self.get_info("ns/all", get_bytes = True)
desc_iterator = stem.descriptor.router_status_entry._parse_file(
- io.BytesIO(str_tools._to_bytes(desc_content)),
+ io.BytesIO(desc_content),
True,
entry_class = stem.descriptor.router_status_entry.RouterStatusEntryV2,
)
diff --git a/test/mocking.py b/test/mocking.py
index 50a0f0e..3b165d8 100644
--- a/test/mocking.py
+++ b/test/mocking.py
@@ -293,7 +293,7 @@ def return_for_args(args_to_return_value, default = None, is_method = False):
def raise_exception(exception):
- def _raise(*args):
+ def _raise(*args, **kwargs):
raise exception
return _raise
More information about the tor-commits
mailing list