mirror of
https://fuchsia.googlesource.com/third_party/github.com/pylint-dev/pylint
synced 2024-09-21 16:19:21 +00:00
087d77adcd
* Add regression test for #4972 hang * Fix loop in too-many-ancestors when an inheritance cycle is inferred Ref #4972. If a class could be inferred as an ancestor of itself then the implementation of _get_parents could get caught in an infinite loop, forever adding itself to to_explore. This could be possible by monkeypatching an ancestor after class definition like in the following simplified example: class Fake(module.Cls): pass module.Cls = Fake Reproducing this is fairly tricky, but this integration test shows the behaviour as of 1e675abcc2aa931421d7ce300908e734a93fd790: #!/bin/sh HERE=$(readlink -f .) VENV=$HERE/venv-repro PIP=$VENV/bin/pip python -m venv "$VENV" PYLINT=$VENV/bin/pylint # assume running in pylint dir $PIP install -e . $PIP install flask mkdir -p repro/flask/ touch repro/__init__.py cat > repro/flask/__init__.py <<'EOF' import flask import repro.flask # self-import necessary class Fake(flask.Flask): pass flask.Flask = Fake EOF echo +++ this is fine $PYLINT --rcfile=/dev/null -- repro/flask/ echo +++ finished echo +++ this loops forever cd repro/; $PYLINT --rcfile=/dev/null -- flask/ echo +++ should not reach here |
||
---|---|---|
.. | ||
checkers | ||
config | ||
extensions | ||
lint | ||
message | ||
pyreverse | ||
reporters | ||
testutils | ||
utils | ||
__init__.py | ||
__main__.py | ||
__pkginfo__.py | ||
constants.py | ||
epylint.py | ||
exceptions.py | ||
graph.py | ||
interfaces.py | ||
typing.py |