Blame SOURCES/0043-fix-LastUpdatedOrderedDict-__getitem__-fetch-from-li.patch

1ae9b3
From d76d54277bc51398f7aa20b3dce0863e3520810b Mon Sep 17 00:00:00 2001
1ae9b3
From: Eric Garver <eric@garver.life>
1ae9b3
Date: Wed, 29 Jul 2020 15:18:38 -0400
1ae9b3
Subject: [PATCH 43/45] fix(LastUpdatedOrderedDict): __getitem__(): fetch from
1ae9b3
 list if int
1ae9b3
1ae9b3
If the LastUpdatedOrderedDict contains a boolean key, e.g.
1ae9b3
1ae9b3
    myLastUpdatedOrderedDict = LastUpdatedOrderedDict()
1ae9b3
    myLastUpdatedOrderedDic[True] = "true"
1ae9b3
1ae9b3
then
1ae9b3
1ae9b3
    myLastUpdatedOrderedDic[1]
1ae9b3
1ae9b3
yields "true". As such, using the LastUpdatedOrderedDict as an iterable
1ae9b3
e.g.
1ae9b3
1ae9b3
    for foo in myLastUpdatedOrderedDict:
1ae9b3
        ...
1ae9b3
1ae9b3
would mean that the for loop tries integer indexes 0 (returns key True),
1ae9b3
and then 1 (also returns key True). This caused duplicate walks of a key
1ae9b3
True if it was the first key in the LastUpdatedOrderedDict.
1ae9b3
1ae9b3
This occurs because
1ae9b3
1ae9b3
    >>> True == 1
1ae9b3
    True
1ae9b3
    >>> False == 0
1ae9b3
    True
1ae9b3
1ae9b3
(cherry picked from commit 55754b65be6eaa697382992679e6673346e39f78)
1ae9b3
(cherry picked from commit 1561dbc6c2b8f8f7f27b89810a8dda9b869b1923)
1ae9b3
---
1ae9b3
 src/firewall/fw_types.py | 6 +++---
1ae9b3
 1 file changed, 3 insertions(+), 3 deletions(-)
1ae9b3
1ae9b3
diff --git a/src/firewall/fw_types.py b/src/firewall/fw_types.py
1ae9b3
index 07c69c61702f..3d90c1812aec 100644
1ae9b3
--- a/src/firewall/fw_types.py
1ae9b3
+++ b/src/firewall/fw_types.py
1ae9b3
@@ -54,10 +54,10 @@ class LastUpdatedOrderedDict(object):
1ae9b3
         self._dict[key] = value
1ae9b3
 
1ae9b3
     def __getitem__(self, key):
1ae9b3
-        if key in self._dict:
1ae9b3
-            return self._dict[key]
1ae9b3
-        else:
1ae9b3
+        if type(key) == int:
1ae9b3
             return self._list[key]
1ae9b3
+        else:
1ae9b3
+            return self._dict[key]
1ae9b3
 
1ae9b3
     def __len__(self):
1ae9b3
         return len(self._list)
1ae9b3
-- 
1ae9b3
2.27.0
1ae9b3