tplugins: fix hook/attr name collision in close() - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit ba33bc4ad85e759d67093fcc1edae51e6ab5a692 DIR parent fa33d1880c572820d69c02536242f2b0475e502c HTML Author: SomberNight <somber.night@protonmail.com> Date: Wed, 19 Dec 2018 02:10:47 +0100 plugins: fix hook/attr name collision in close() Revealer plugin has method "password_dialog" "password_dialog" is also a hook name, but revealer.password_dialog is not a hook Diffstat: M electrum/plugin.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) --- DIR diff --git a/electrum/plugin.py b/electrum/plugin.py t@@ -251,11 +251,16 @@ class BasePlugin(PrintError): def close(self): # remove self from hooks - for k in dir(self): - if k in hook_names: - l = hooks.get(k, []) - l.remove((self, getattr(self, k))) - hooks[k] = l + for attr_name in dir(self): + if attr_name in hook_names: + # found attribute in self that is also the name of a hook + l = hooks.get(attr_name, []) + try: + l.remove((self, getattr(self, attr_name))) + except ValueError: + # maybe attr name just collided with hook name and was not hook + continue + hooks[attr_name] = l self.parent.close_plugin(self) self.on_close()