[issue46547] `pydoc.Helper` leaks several `for` loop variables

2022-01-27 Thread Nikita Sobolev


Change by Nikita Sobolev :


--
keywords: +patch
pull_requests: +29136
stage:  -> patch review
pull_request: https://github.com/python/cpython/pull/30957

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue46547] `pydoc.Helper` leaks several `for` loop variables

2022-01-27 Thread Nikita Sobolev


New submission from Nikita Sobolev :

Here's the problem. `pydoc.Helper` is defined as:

```
class Helper:
for topic, symbols_ in _symbols_inverse.items():
for symbol in symbols_:
topics = symbols.get(symbol, topic)
if topic not in topics:
topics = topics + ' ' + topic
symbols[symbol] = topics
```

Link: 
https://github.com/python/cpython/blob/08c0ed2d9c0d01ad1a5adc0787bc75e4e90cbb85/Lib/pydoc.py#L1877-L1882

It causes some unwanted consequences: `topic, symbols_, symbol` are leaking to 
the class's namespace. Example:

```
>>> import pydoc
>>> pydoc.Helper.symbol
'J'
>>> pydoc.Helper.topic
'COMPLEX'
>>> pydoc.Helper.symbols_
('j', 'J')
```

There's also `topics` var, but it is shadowed later.

So, I propose deleting all intermediate variables right after the `for` loop.

--
components: Library (Lib)
messages: 411856
nosy: sobolevn
priority: normal
severity: normal
status: open
title: `pydoc.Helper` leaks several `for` loop variables
type: behavior
versions: Python 3.11

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com