From 0ae2ef68be57f056038adaf064570e6725c6f20f Mon Sep 17 00:00:00 2001 From: sebres Date: Wed, 20 May 2020 15:36:06 +0200 Subject: [PATCH] ensure iterator is safe (traverse over the list in snapshot created within a lock), avoids getting modified state as well as "dictionary changed size during iteration" errors --- fail2ban/server/banmanager.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/fail2ban/server/banmanager.py b/fail2ban/server/banmanager.py index 8c0a6965..479ba26f 100644 --- a/fail2ban/server/banmanager.py +++ b/fail2ban/server/banmanager.py @@ -104,7 +104,7 @@ class BanManager: def getBanList(self): with self.__lock: - return self.__banList.keys() + return list(self.__banList.keys()) ## # Returns a iterator to ban list (used in reload, so idle). @@ -112,8 +112,9 @@ class BanManager: # @return ban list iterator def __iter__(self): + # ensure iterator is safe (traverse over the list in snapshot created within lock): with self.__lock: - return self.__banList.itervalues() + return iter(list(self.__banList.values())) ## # Returns normalized value