Skip to content

An assertion failure in test_pickle #82565

Description

@ZackerySpytz
BPO 38384
Nosy @taleinat, @serhiy-storchaka, @phmc, @ZackerySpytz, @iritkatriel
PRs
  • gh-82565: Fix a possible assertion failure in _pickle #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:

    assignee = None
    closed_at = None
    created_at = <Date 2019-10-06.13:39:09.443>
    labels = ['extension-modules', '3.10', '3.9', 'type-crash', '3.11']
    title = 'An assertion failure in test_pickle'
    updated_at = <Date 2021-10-19.09:07:52.229>
    user = 'https://github.com/ZackerySpytz'

    bugs.python.org fields:

    activity = <Date 2021-10-19.09:07:52.229>
    actor = 'iritkatriel'
    assignee = 'none'
    closed = False
    closed_date = None
    closer = None
    components = ['Extension Modules']
    creation = <Date 2019-10-06.13:39:09.443>
    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

    Activity

    1. ZackerySpytz commented on Oct 6, 2019

      ZackerySpytzmannequin
      MannequinAuthor

      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_buffering_readline
      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.

    2. serhiy-storchaka commented on Oct 6, 2019

      @serhiy-storchaka
      Member

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

    3. taleinat commented on Nov 22, 2019

      @taleinat
      Contributor

      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.

    4. iritkatriel commented on Oct 19, 2021

      @iritkatriel
      Member

      Reproduced on 3.11 with Serhiy's reproducer:

      class F:
          @property
          def read(self):
              1/0
      
      import pickle
      pickle.load(F())
    5. added
      3.11only security fixes
      and removed on Oct 19, 2021
    6. transferred this issue fromon Apr 10, 2022
    7. 4 remaining items

    8. SahillMulani commented on Apr 3, 2023

      @SahillMulani

      Please check the below code test cases

      File without read and readline

      • Please help me with this test case

      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())
      
    9. ZackerySpytz commented on Apr 8, 2023

      @ZackerySpytz
      ContributorAuthor

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

      @SahillMulani Please find a different issue to work on.

    10. removed
      type-crashA hard crash of the interpreter, possibly with a core dump
      on Apr 20, 2023
    11. added a commit that references this issue on Dec 1, 2023
    12. added 2 commits that reference this issue on Dec 1, 2023
    13. serhiy-storchaka commented on Dec 1, 2023

      @serhiy-storchaka
      Member

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

    14. added 2 commits that reference this issue on Dec 1, 2023
    15. added a commit that references this issue on Feb 11, 2024
    16. added a commit that references this issue on Sep 2, 2024
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

    Metadata

    Metadata

    Assignees

    No one assigned

      Labels

      3.11only security fixes3.12only security fixeseasyextension-modulesC modules in the Modules dirtype-bugAn unexpected behavior, bug, or error

      Projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions