[tor-commits] [stem/master] Validation for params fails due to ordering

atagar at torproject.org atagar at torproject.org
Mon Jan 30 18:31:26 UTC 2017


commit 40fd99d8f14261f8221734e837ea0db1028dd127
Author: Damian Johnson <atagar at torproject.org>
Date:   Fri Jan 27 19:17:15 2017 -0800

    Validation for params fails due to ordering
    
    We check that a params attribute is only supplied in consensus methods that
    should have it. However, we checked it before the value might be set.
    
    I'm not sure why this only surfaced with recent changes but unit tests failed
    for this reason.
---
 stem/descriptor/__init__.py      |  2 +-
 stem/descriptor/networkstatus.py | 10 +++++-----
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/stem/descriptor/__init__.py b/stem/descriptor/__init__.py
index 0d4e73e..ee0b289 100644
--- a/stem/descriptor/__init__.py
+++ b/stem/descriptor/__init__.py
@@ -643,7 +643,7 @@ class Descriptor(object):
 
   def __getattr__(self, name):
     # If an attribute we should have isn't present it means either...
-    #    
+    #
     #   a. we still need to lazy load this
     #   b. we read the whole descriptor but it wasn't present, so needs the default
 
diff --git a/stem/descriptor/networkstatus.py b/stem/descriptor/networkstatus.py
index 9818624..78b453b 100644
--- a/stem/descriptor/networkstatus.py
+++ b/stem/descriptor/networkstatus.py
@@ -638,11 +638,6 @@ def _parse_header_parameters_line(descriptor, entries):
 
   value = _value('params', entries)
 
-  # should only appear in consensus-method 7 or later
-
-  if not descriptor.meets_consensus_method(7):
-    raise ValueError("A network status document's 'params' line should only appear in consensus-method 7 or later")
-
   if value != '':
     descriptor.params = _parse_int_mappings('params', value, True)
     descriptor._check_params_constraints()
@@ -998,6 +993,11 @@ class NetworkStatusDocumentV3(NetworkStatusDocument):
 
       self._parse(entries, validate, parser_for_line = self.HEADER_PARSER_FOR_LINE)
 
+      # should only appear in consensus-method 7 or later
+
+      if not self.meets_consensus_method(7) and 'params' in list(entries.keys()):
+        raise ValueError("A network status document's 'params' line should only appear in consensus-method 7 or later")
+
       _check_for_missing_and_disallowed_fields(self, entries, HEADER_STATUS_DOCUMENT_FIELDS)
 
       # default consensus_method and consensus_methods based on if we're a consensus or vote





More information about the tor-commits mailing list