[tor-commits] [stem/master] Fix handling for HS_DESC_CONTENT without descriptors
atagar at torproject.org
atagar at torproject.org
Sun Apr 26 03:01:45 UTC 2015
commit da4550ddf5b4d29d05876c15dbda52713817984e
Author: Damian Johnson <atagar at torproject.org>
Date: Sat Apr 25 18:38:07 2015 -0700
Fix handling for HS_DESC_CONTENT without descriptors
When you issue a HSFETCH for something that doesn't exist tor provides a
HS_DESC_CONTENT without a descriptor. This is great, but we didn't properly
handle it. Also, we didn't strip the 'OK' at the end before attempting to parse
the descriptor content.
---
stem/response/events.py | 10 +++++++---
test/unit/response/events.py | 17 +++++++++++++++++
2 files changed, 24 insertions(+), 3 deletions(-)
diff --git a/stem/response/events.py b/stem/response/events.py
index 47d6a0f..438d1e5 100644
--- a/stem/response/events.py
+++ b/stem/response/events.py
@@ -691,9 +691,13 @@ class HSDescContentEvent(Event):
except stem.ProtocolError:
raise stem.ProtocolError("HS_DESC_CONTENT's directory doesn't match a ServerSpec: %s" % self)
- self.descriptor = list(stem.descriptor.hidden_service_descriptor._parse_file(
- io.BytesIO(str_tools._to_bytes('\n'.join(str(self).splitlines()[1:]))),
- ))[0]
+ # skip the first line (our positional arguments) and last ('OK')
+
+ desc_content = str_tools._to_bytes('\n'.join(str(self).splitlines()[1:-1]))
+ self.descriptor = None
+
+ if desc_content:
+ self.descriptor = list(stem.descriptor.hidden_service_descriptor._parse_file(io.BytesIO(desc_content)))[0]
class LogEvent(Event):
diff --git a/test/unit/response/events.py b/test/unit/response/events.py
index 2797a02..756e531 100644
--- a/test/unit/response/events.py
+++ b/test/unit/response/events.py
@@ -274,6 +274,13 @@ nHIs1lSrV7Ux2WQ3qSVj505fTGSCmaQRBX726ZlTPW0=
650 OK
"""
+HS_DESC_CONTENT_EMPTY_EVENT = """\
+650+HS_DESC_CONTENT 3g2upl4pq6kufc4n 255tjwttk3wi7r2df57nuprs72j2daa3 $D7A0C3262724F2BC9646F6836E967A2777A3AF83~tsunaminitor
+
+.
+650 OK
+"""
+
# NEWCONSENSUS event from v0.2.1.30.
NEWCONSENSUS_EVENT = """650+NEWCONSENSUS
@@ -886,6 +893,16 @@ class TestEvents(unittest.TestCase):
self.assertEqual(3, len(desc.introduction_points()))
self.assertTrue('s9Z0zWHsoPu' in desc.signature)
+ event = _get_event(HS_DESC_CONTENT_EMPTY_EVENT)
+
+ self.assertTrue(isinstance(event, stem.response.events.HSDescContentEvent))
+ self.assertEqual('3g2upl4pq6kufc4n', event.address)
+ self.assertEqual('255tjwttk3wi7r2df57nuprs72j2daa3', event.descriptor_id)
+ self.assertEqual('$D7A0C3262724F2BC9646F6836E967A2777A3AF83~tsunaminitor', event.directory)
+ self.assertEqual('D7A0C3262724F2BC9646F6836E967A2777A3AF83', event.directory_fingerprint)
+ self.assertEqual('tsunaminitor', event.directory_nickname)
+ self.assertEqual(None, event.descriptor)
+
def test_newdesc_event(self):
event = _get_event(NEWDESC_SINGLE)
expected_relays = (('B3FA3110CC6F42443F039220C134CBD2FC4F0493', 'Sakura'),)
More information about the tor-commits
mailing list