Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

AstroidError crash parsing test module #8828

Closed
ddaanet opened this issue Jul 6, 2023 · 1 comment
Closed

AstroidError crash parsing test module #8828

ddaanet opened this issue Jul 6, 2023 · 1 comment
Labels
Cannot reproduce 🤷 Crash 💥 A bug that makes pylint crash

Comments

@ddaanet
Copy link

ddaanet commented Jul 6, 2023

Bug description

When parsing the following files:

module1.py

from module2 import TestCase


class TestDeleteDocument(TestCase):

    _delete = None

    def apply_paches(self):
        self._delete = self.patch('lib.gdoc._get_service_files')().delete

    def assert_remote_document_deleted(self):
        self._delete.assert_called_once_with(fileId='remote_id')

module2.py

import unittest
from mock import patch


class TestCase(unittest.TestCase):

    def patch(self, target):
        return self._patch(target)

    def _patch(self, target):
        patcher = patch(target)
        mock = patcher.start()
        return mock

Configuration

No response

Command used

pylint module1.py

Pylint output

pylint crashed with a ``AstroidError`` and with the following stacktrace:

Traceback (most recent call last):
  File "/home/vagrant/venv3/lib/python3.8/site-packages/pylint/checkers/utils.py", line 1382, in safe_infer
    for inferred in infer_gen:
  File "/home/vagrant/venv3/lib/python3.8/site-packages/astroid/nodes/node_ng.py", line 171, in infer
    yield from self._infer(context=context, **kwargs)
  File "/home/vagrant/venv3/lib/python3.8/site-packages/astroid/decorators.py", line 157, in raise_if_nothing_inferred
    yield from generator
  File "/home/vagrant/venv3/lib/python3.8/site-packages/astroid/decorators.py", line 112, in wrapped
    for res in _func(node, context, **kwargs):
  File "/home/vagrant/venv3/lib/python3.8/site-packages/astroid/inference.py", line 358, in infer_attribute
    for owner in self.expr.infer(context):
  File "/home/vagrant/venv3/lib/python3.8/site-packages/astroid/nodes/node_ng.py", line 184, in infer
    for i, result in enumerate(self._infer(context=context, **kwargs)):
  File "/home/vagrant/venv3/lib/python3.8/site-packages/astroid/decorators.py", line 157, in raise_if_nothing_inferred
    yield from generator
  File "/home/vagrant/venv3/lib/python3.8/site-packages/astroid/decorators.py", line 112, in wrapped
    for res in _func(node, context, **kwargs):
  File "/home/vagrant/venv3/lib/python3.8/site-packages/astroid/inference.py", line 372, in infer_attribute
    yield from owner.igetattr(self.attrname, context)
  File "/home/vagrant/venv3/lib/python3.8/site-packages/astroid/bases.py", line 274, in igetattr
    yield from _infer_stmts(
  File "/home/vagrant/venv3/lib/python3.8/site-packages/astroid/bases.py", line 177, in _infer_stmts
    for inf in stmt.infer(context=context):
  File "/home/vagrant/venv3/lib/python3.8/site-packages/astroid/nodes/node_ng.py", line 184, in infer
    for i, result in enumerate(self._infer(context=context, **kwargs)):
  File "/home/vagrant/venv3/lib/python3.8/site-packages/astroid/decorators.py", line 157, in raise_if_nothing_inferred
    yield from generator
  File "/home/vagrant/venv3/lib/python3.8/site-packages/astroid/decorators.py", line 112, in wrapped
    for res in _func(node, context, **kwargs):
  File "/home/vagrant/venv3/lib/python3.8/site-packages/astroid/bases.py", line 177, in _infer_stmts
    for inf in stmt.infer(context=context):
  File "/home/vagrant/venv3/lib/python3.8/site-packages/astroid/nodes/node_ng.py", line 184, in infer
    for i, result in enumerate(self._infer(context=context, **kwargs)):
  File "/home/vagrant/venv3/lib/python3.8/site-packages/astroid/decorators.py", line 157, in raise_if_nothing_inferred
    yield from generator
  File "/home/vagrant/venv3/lib/python3.8/site-packages/astroid/decorators.py", line 112, in wrapped
    for res in _func(node, context, **kwargs):
  File "/home/vagrant/venv3/lib/python3.8/site-packages/astroid/inference.py", line 358, in infer_attribute
    for owner in self.expr.infer(context):
  File "/home/vagrant/venv3/lib/python3.8/site-packages/astroid/nodes/node_ng.py", line 184, in infer
    for i, result in enumerate(self._infer(context=context, **kwargs)):
  File "/home/vagrant/venv3/lib/python3.8/site-packages/astroid/decorators.py", line 157, in raise_if_nothing_inferred
    yield from generator
  File "/home/vagrant/venv3/lib/python3.8/site-packages/astroid/decorators.py", line 112, in wrapped
    for res in _func(node, context, **kwargs):
  File "/home/vagrant/venv3/lib/python3.8/site-packages/astroid/inference.py", line 279, in infer_call
    yield from callee.infer_call_result(caller=self, context=callcontext)
  File "/home/vagrant/venv3/lib/python3.8/site-packages/astroid/bases.py", line 322, in infer_call_result
    for res in node.infer_call_result(caller, context):
  File "/home/vagrant/venv3/lib/python3.8/site-packages/astroid/bases.py", line 322, in infer_call_result
    for res in node.infer_call_result(caller, context):
  File "/home/vagrant/venv3/lib/python3.8/site-packages/astroid/bases.py", line 322, in infer_call_result
    for res in node.infer_call_result(caller, context):
  [Previous line repeated 941 more times]
  File "/home/vagrant/venv3/lib/python3.8/site-packages/astroid/bases.py", line 319, in infer_call_result
    for node in self._proxied.igetattr("__call__", context):
  File "/home/vagrant/venv3/lib/python3.8/site-packages/astroid/nodes/scoped_nodes/scoped_nodes.py", line 2644, in igetattr
    attributes = self.getattr(name, context, class_context=class_context)
  File "/home/vagrant/venv3/lib/python3.8/site-packages/astroid/nodes/scoped_nodes/scoped_nodes.py", line 2563, in getattr
    result = [self.special_attributes.lookup(name)]
  File "/home/vagrant/venv3/lib/python3.8/site-packages/astroid/interpreter/objectmodel.py", line 134, in lookup
    return getattr(self, IMPL_PREFIX + name)
  File "/home/vagrant/venv3/lib/python3.8/site-packages/astroid/interpreter/objectmodel.py", line 557, in attr___call__
    return self._instance.instantiate_class()
  File "/home/vagrant/venv3/lib/python3.8/site-packages/astroid/nodes/scoped_nodes/scoped_nodes.py", line 2519, in instantiate_class
    if any(cls.name in EXCEPTION_BASE_CLASSES for cls in self.mro()):
  File "/home/vagrant/venv3/lib/python3.8/site-packages/astroid/nodes/scoped_nodes/scoped_nodes.py", line 3066, in mro
    return self._compute_mro(context=context)
  File "/home/vagrant/venv3/lib/python3.8/site-packages/astroid/nodes/scoped_nodes/scoped_nodes.py", line 3042, in _compute_mro
    mro = base._compute_mro(context=context)
  File "/home/vagrant/venv3/lib/python3.8/site-packages/astroid/nodes/scoped_nodes/scoped_nodes.py", line 3042, in _compute_mro
    mro = base._compute_mro(context=context)
  File "/home/vagrant/venv3/lib/python3.8/site-packages/astroid/nodes/scoped_nodes/scoped_nodes.py", line 3042, in _compute_mro
    mro = base._compute_mro(context=context)
  File "/home/vagrant/venv3/lib/python3.8/site-packages/astroid/nodes/scoped_nodes/scoped_nodes.py", line 3035, in _compute_mro
    inferred_bases = list(self._inferred_bases(context=context))
  File "/home/vagrant/venv3/lib/python3.8/site-packages/astroid/nodes/scoped_nodes/scoped_nodes.py", line 3020, in _inferred_bases
    for b in stmt.infer(context=context.clone())
  File "/home/vagrant/venv3/lib/python3.8/site-packages/astroid/context.py", line 140, in clone
    clone = InferenceContext(self.path.copy(), nodes_inferred=self._nodes_inferred)
  File "/home/vagrant/venv3/lib/python3.8/site-packages/astroid/context.py", line 57, in __init__
    self.path = path or set()
RecursionError: maximum recursion depth exceeded while calling a Python object

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/vagrant/venv3/lib/python3.8/site-packages/pylint/lint/pylinter.py", line 811, in _lint_file
    check_astroid_module(module)
  File "/home/vagrant/venv3/lib/python3.8/site-packages/pylint/lint/pylinter.py", line 1085, in check_astroid_module
    retval = self._check_astroid_module(
  File "/home/vagrant/venv3/lib/python3.8/site-packages/pylint/lint/pylinter.py", line 1135, in _check_astroid_module
    walker.walk(node)
  File "/home/vagrant/venv3/lib/python3.8/site-packages/pylint/utils/ast_walker.py", line 94, in walk
    self.walk(child)
  File "/home/vagrant/venv3/lib/python3.8/site-packages/pylint/utils/ast_walker.py", line 94, in walk
    self.walk(child)
  File "/home/vagrant/venv3/lib/python3.8/site-packages/pylint/utils/ast_walker.py", line 91, in walk
    callback(astroid)
  File "/home/vagrant/venv3/lib/python3.8/site-packages/pylint/checkers/base/docstring_checker.py", line 147, in visit_functiondef
    self._check_docstring(
  File "/home/vagrant/venv3/lib/python3.8/site-packages/pylint/checkers/base/docstring_checker.py", line 192, in _check_docstring
    func = utils.safe_infer(node.body[0].value.func)
  File "/home/vagrant/venv3/lib/python3.8/site-packages/pylint/checkers/utils.py", line 1406, in safe_infer
    raise AstroidError from e
astroid.exceptions.AstroidError

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/vagrant/venv3/lib/python3.8/site-packages/pylint/lint/pylinter.py", line 775, in _lint_files
    self._lint_file(fileitem, module, check_astroid_module)
  File "/home/vagrant/venv3/lib/python3.8/site-packages/pylint/lint/pylinter.py", line 813, in _lint_file
    raise astroid.AstroidError from e
astroid.exceptions.AstroidError

Expected behavior

Normal operation instead of crash.

Pylint version

pylint 2.17.4
astroid 2.15.5
Python 3.8.12 (default, Jun 30 2023, 14:09:47) 
[GCC 10.2.1 20210110]

OS / Environment

Debian 11 Bullseye

Additional dependencies

astroid==2.15.5
dill==0.3.6
isort==5.12.0
lazy-object-proxy==1.9.0
mccabe==0.7.0
mock==5.0.2
platformdirs==3.8.0
pylint==2.17.4
tomli==2.0.1
tomlkit==0.11.8
typing_extensions==4.7.1
wrapt==1.15.0

@ddaanet ddaanet added the Needs triage 📥 Just created, needs acknowledgment, triage, and proper labelling label Jul 6, 2023
@Pierre-Sassoulas Pierre-Sassoulas added Crash 💥 A bug that makes pylint crash Cannot reproduce 🤷 and removed Needs triage 📥 Just created, needs acknowledgment, triage, and proper labelling labels Aug 16, 2023
@Pierre-Sassoulas
Copy link
Member

Pierre-Sassoulas commented Aug 16, 2023

Thank you for opening the issue, and sorry for the delay. I cannot reproduce on main and a lot happened since astroid 2.15.5 / pylint 2.17.4. It also seems to be very close to #8842 where we need to take a decision about what to do when genuinely large recursions happens. Please do not hesitate to open a new issue if the problem persists when using pylint 3.0.0a7 or superior.

@Pierre-Sassoulas Pierre-Sassoulas closed this as not planned Won't fix, can't repro, duplicate, stale Aug 16, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Cannot reproduce 🤷 Crash 💥 A bug that makes pylint crash
Projects
None yet
Development

No branches or pull requests

2 participants