Closed 2776f601-9573-4690-ab86-59139fdf3c89 closed 7 months 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.
I do not understand how you got an assertion failure. Did you interrupt tests with Ctrl-C?
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.
Reproduced on 3.11 with Serhiy's reproducer:
class F:
@property
def read(self):
1/0
import pickle
pickle.load(F())
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.
class F:
read = bad_property
self.assertRaises(ZeroDivisionError, self.Unpickler, F())
class F:
readline = bad_property
self.assertRaises(ZeroDivisionError, self.Unpickler, F())
I plan on updating my PR within the next two weeks.
@SahillMulani Please find a different issue to work on.
The original issue was fixed in #105667, but good tests are useful.
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