[tor-commits] [stem/master] Extrainfo hidden service fields can be negative

atagar at torproject.org atagar at torproject.org
Mon Mar 16 18:45:02 UTC 2015


commit 60ad8473f5d10e4b354f2b7f182164e1bfdca93a
Author: Damian Johnson <atagar at torproject.org>
Date:   Mon Mar 16 11:44:48 2015 -0700

    Extrainfo hidden service fields can be negative
    
    Checked with Karsten on #15276.
---
 stem/descriptor/extrainfo_descriptor.py      |    7 ++++---
 test/unit/descriptor/extrainfo_descriptor.py |    7 ++++++-
 2 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/stem/descriptor/extrainfo_descriptor.py b/stem/descriptor/extrainfo_descriptor.py
index 228532f..e255320 100644
--- a/stem/descriptor/extrainfo_descriptor.py
+++ b/stem/descriptor/extrainfo_descriptor.py
@@ -512,10 +512,11 @@ def _parse_hs_stats(keyword, stat_attribute, extra_attribute, descriptor, entrie
 
     if not value_comp:
       raise ValueError("'%s' line was blank" % keyword)
-    elif not value_comp[0].isdigit():
-      raise ValueError("'%s' stat was non-numeric (%s): %s %s" % (keyword, value_comp[0], keyword, value))
 
-    stat = int(value_comp[0])
+    try:
+      stat = int(value_comp[0])
+    except ValueError:
+      raise ValueError("'%s' stat was non-numeric (%s): %s %s" % (keyword, value_comp[0], keyword, value))
 
     for entry in value_comp[1:]:
       if '=' not in entry:
diff --git a/test/unit/descriptor/extrainfo_descriptor.py b/test/unit/descriptor/extrainfo_descriptor.py
index 6049f50..c418ff3 100644
--- a/test/unit/descriptor/extrainfo_descriptor.py
+++ b/test/unit/descriptor/extrainfo_descriptor.py
@@ -562,7 +562,6 @@ k0d2aofcVbHr4fPQOSST0LXDrhFl5Fqo5um296zpJGvRUeO6S44U/EfJAGShtqWw
 
     test_entries = (
       '',
-      '-50',
       'hello',
       ' key=value',
       '40 key',
@@ -577,6 +576,12 @@ k0d2aofcVbHr4fPQOSST0LXDrhFl5Fqo5um296zpJGvRUeO6S44U/EfJAGShtqWw
       self.assertEqual(345, getattr(desc, stat_attr))
       self.assertEqual({}, getattr(desc, extra_attr))
 
+      # values can be negative (#15276)
+
+      desc = get_relay_extrainfo_descriptor({keyword: '-345'})
+      self.assertEqual(-345, getattr(desc, stat_attr))
+      self.assertEqual({}, getattr(desc, extra_attr))
+
       # with extra attributes
 
       desc = get_relay_extrainfo_descriptor({keyword: '345 spiffy=true snowmen=neat'})



More information about the tor-commits mailing list