python / cpython

The Python programming language
https://www.python.org/
Other
61.16k stars 29.52k forks source link

An assertion failure in test_pickle #82565

Closed 2776f601-9573-4690-ab86-59139fdf3c89 closed 7 months ago

2776f601-9573-4690-ab86-59139fdf3c89 commented 4 years ago
BPO 38384
Nosy @taleinat, @serhiy-storchaka, @phmc, @ZackerySpytz, @iritkatriel
PRs
  • python/cpython#16606
  • Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.

    Show more details

    GitHub fields: ```python assignee = None closed_at = None created_at = labels = ['extension-modules', '3.10', '3.9', 'type-crash', '3.11'] title = 'An assertion failure in test_pickle' updated_at = user = 'https://github.com/ZackerySpytz' ``` bugs.python.org fields: ```python activity = actor = 'iritkatriel' assignee = 'none' closed = False closed_date = None closer = None components = ['Extension Modules'] creation = creator = 'ZackerySpytz' dependencies = [] files = [] hgrepos = [] issue_num = 38384 keywords = ['patch'] message_count = 4.0 messages = ['354038', '354040', '357337', '404277'] nosy_count = 5.0 nosy_names = ['taleinat', 'serhiy.storchaka', 'pconnell', 'ZackerySpytz', 'iritkatriel'] pr_nums = ['16606'] priority = 'normal' resolution = None stage = 'patch review' status = 'open' superseder = None type = 'crash' url = 'https://bugs.python.org/issue38384' versions = ['Python 3.9', 'Python 3.10', 'Python 3.11'] ```

    Linked PRs

    2776f601-9573-4690-ab86-59139fdf3c89 commented 4 years ago

    When running test_pickle, I sometimes see an assertion failure.

    ./python -m test test_pickle 0:00:00 load avg: 1.04 Run tests sequentially 0:00:00 load avg: 1.04 [1/1] test_pickle python: Objects/typeobject.c:3151: _PyType_Lookup: Assertion `!PyErr_Occurred()' failed. Fatal Python error: Aborted

    Current thread 0x00007f8158632140 (most recent call first): File "/home/lubuntu2/cpython/Lib/test/pickletester.py", line 3400 in test_unpickling_bufferingreadline File "/home/lubuntu2/cpython/Lib/unittest/case.py", line 617 in _callTestMethod File "/home/lubuntu2/cpython/Lib/unittest/case.py", line 663 in run File "/home/lubuntu2/cpython/Lib/unittest/case.py", line 725 in \_call File "/home/lubuntu2/cpython/Lib/unittest/suite.py", line 122 in run File "/home/lubuntu2/cpython/Lib/unittest/suite.py", line 84 in __call File "/home/lubuntu2/cpython/Lib/unittest/suite.py", line 122 in run File "/home/lubuntu2/cpython/Lib/unittest/suite.py", line 84 in __call File "/home/lubuntu2/cpython/Lib/test/support/testresult.py", line 162 in run File "/home/lubuntu2/cpython/Lib/test/support/init.py", line 2032 in _run_suite File "/home/lubuntu2/cpython/Lib/test/support/init.py", line 2128 in run_unittest File "/home/lubuntu2/cpython/Lib/test/test_pickle.py", line 525 in test_main File "/home/lubuntu2/cpython/Lib/test/libregrtest/runtest.py", line 234 in _runtest_inner2 File "/home/lubuntu2/cpython/Lib/test/libregrtest/runtest.py", line 270 in _runtest_inner File "/home/lubuntu2/cpython/Lib/test/libregrtest/runtest.py", line 153 in _runtest File "/home/lubuntu2/cpython/Lib/test/libregrtest/runtest.py", line 193 in runtest File "/home/lubuntu2/cpython/Lib/test/libregrtest/main.py", line 417 in run_tests_sequential File "/home/lubuntu2/cpython/Lib/test/libregrtest/main.py", line 515 in run_tests File "/home/lubuntu2/cpython/Lib/test/libregrtest/main.py", line 687 in _main File "/home/lubuntu2/cpython/Lib/test/libregrtest/main.py", line 634 in main File "/home/lubuntu2/cpython/Lib/test/libregrtest/main.py", line 712 in main File "/home/lubuntu2/cpython/Lib/test/main__.py", line 2 in \<module> File "/home/lubuntu2/cpython/Lib/runpy.py", line 85 in _run_code File "/home/lubuntu2/cpython/Lib/runpy.py", line 192 in _run_module_as_main Aborted (core dumped)

    In _Unpickler_SetInputStream(), _PyObject_LookupAttrId() is called three times in a row without any error handling. If an exception occurs during the first or second call, _PyObject_LookupAttrId() will be called with a live exception.

    serhiy-storchaka commented 4 years ago

    I do not understand how you got an assertion failure. Did you interrupt tests with Ctrl-C?

    taleinat commented 4 years ago

    Good catch on this, Zackery!

    For anyone readying this, Serhiy posted a minimal reproducer in a PR comment, and the PR now adds a test for this.

    iritkatriel commented 2 years ago

    Reproduced on 3.11 with Serhiy's reproducer:

    class F:
        @property
        def read(self):
            1/0
    
    import pickle
    pickle.load(F())
    iritkatriel commented 1 year ago

    The PR is almost there but need a few more tests. The OP is no longer responding, so I am marking as easy for someone new to finish it.

    SahillMulani commented 1 year ago

    Please check the below code test cases

    File without read and readline

    File with bad read and without readline

        class F:  
            read = bad_property
        self.assertRaises(ZeroDivisionError, self.Unpickler, F())

    File with bad readline and without read

        class F: 
            readline = bad_property
        self.assertRaises(ZeroDivisionError, self.Unpickler, F())
    ZackerySpytz commented 1 year ago

    I plan on updating my PR within the next two weeks.

    @SahillMulani Please find a different issue to work on.

    serhiy-storchaka commented 7 months ago

    The original issue was fixed in #105667, but good tests are useful.