[tor-commits] [stem/master] Python3 errors due to list modificaion during iteration

atagar at torproject.org atagar at torproject.org
Tue Oct 17 18:49:45 UTC 2017


commit 49c084d8388551804a84fb638db8db28acd0a0ef
Author: Damian Johnson <atagar at torproject.org>
Date:   Tue Oct 17 03:55:01 2017 -0700

    Python3 errors due to list modificaion during iteration
    
    When iterating over keys python 2.x makes a shallow clone of lists whereas
    python 3.x doesn't. Good for performance, but means we need to be careful about
    modifying a list during iteration. Caught thanks to our integ tests...
    
      ======================================================================
      ERROR: test_without_ephemeral_hidden_services
      ----------------------------------------------------------------------
      Traceback (most recent call last):
        File "/home/atagar/Desktop/stem/test/require.py", line 58, in wrapped
          return func(self, *args, **kwargs)
        File "/home/atagar/Desktop/stem/test/require.py", line 58, in wrapped
          return func(self, *args, **kwargs)
        File "/home/atagar/Desktop/stem/test/integ/control/controller.py", line 560, in test_without_ephemeral_hidden_services
          self.assertEqual([], controller.list_ephemeral_hidden_services())
        File "/home/atagar/Desktop/stem/stem/control.py", line 475, in wrapped
          return func(self, *args, **kwargs)
        File "/home/atagar/Desktop/stem/stem/control.py", line 2774, in list_ephemeral_hidden_services
          result += self.get_info('onions/current').split('\n')
        File "/home/atagar/Desktop/stem/stem/control.py", line 475, in wrapped
          return func(self, *args, **kwargs)
        File "/home/atagar/Desktop/stem/stem/control.py", line 1191, in get_info
          self._set_cache(to_cache, 'getinfo')
        File "/home/atagar/Desktop/stem/stem/control.py", line 3112, in _set_cache
          for cache_key in self._request_cache.keys():
      RuntimeError: dictionary changed size during iteration
---
 stem/control.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/stem/control.py b/stem/control.py
index ce339da9..ac18c3bc 100644
--- a/stem/control.py
+++ b/stem/control.py
@@ -3109,7 +3109,7 @@ class Controller(BaseController):
       # if no params are provided then clear the namespace
 
       if not params and namespace:
-        for cache_key in self._request_cache.keys():
+        for cache_key in list(self._request_cache.keys()):
           if cache_key.startswith('%s.' % namespace):
             del self._request_cache[cache_key]
 
@@ -3122,7 +3122,7 @@ class Controller(BaseController):
           cache_key = key
 
         if value is None:
-          if cache_key in self._request_cache:
+          if cache_key in list(self._request_cache.keys()):
             del self._request_cache[cache_key]
         else:
           self._request_cache[cache_key] = value





More information about the tor-commits mailing list