From a38315dd72a1cc7f76d85283b9dfb0360933f80d Mon Sep 17 00:00:00 2001 From: Nikita Sobolev Date: Thu, 27 Jan 2022 17:48:01 +0300 Subject: [PATCH 1/3] Do not leak `method_name` in `DeprecatedList` --- importlib_metadata/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/importlib_metadata/__init__.py b/importlib_metadata/__init__.py index 7713e1e0..2b959c38 100644 --- a/importlib_metadata/__init__.py +++ b/importlib_metadata/__init__.py @@ -310,6 +310,7 @@ def wrapped(self, *args, **kwargs): 'sort', ]: locals()[method_name] = _wrap_deprecated_method(method_name) + del method_name def __add__(self, other): if not isinstance(other, tuple): From bf43585416b7ff2693822cce725561648d72407b Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Thu, 27 Jan 2022 23:03:48 -0500 Subject: [PATCH 2/3] Prefer functional approach, avoiding any locals. --- importlib_metadata/__init__.py | 25 +++++++++---------------- 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/importlib_metadata/__init__.py b/importlib_metadata/__init__.py index 2b959c38..3a62d56b 100644 --- a/importlib_metadata/__init__.py +++ b/importlib_metadata/__init__.py @@ -295,22 +295,15 @@ def wrapped(self, *args, **kwargs): self._warn() return getattr(super(), method_name)(*args, **kwargs) - return wrapped - - for method_name in [ - '__setitem__', - '__delitem__', - 'append', - 'reverse', - 'extend', - 'pop', - 'remove', - '__iadd__', - 'insert', - 'sort', - ]: - locals()[method_name] = _wrap_deprecated_method(method_name) - del method_name + return method_name, wrapped + + locals().update( + map( + _wrap_deprecated_method, + '__setitem__ __delitem__ append reverse extend pop remove ' + '__iadd__ insert sort'.split(), + ) + ) def __add__(self, other): if not isinstance(other, tuple): From 30a199a45a474ddd7d94ed0d7a19f6cb0984e7d1 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Thu, 27 Jan 2022 23:16:18 -0500 Subject: [PATCH 3/3] Update changelog. --- CHANGES.rst | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index b692d3e4..9c707407 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,3 +1,9 @@ +v4.10.2 +======= + +* #365 and bpo-46546: Avoid leaking ``method_name`` in + ``DeprecatedList``. + v4.10.1 =======