Repository navigation
3.13.0rc1 regression in PyEval_GetLocals(): SystemError: Objects/dictobject.c:3774: bad argument to internal function #122728
Copy link
Copy link
Closed
Labels
3.13only security fixesonly security fixes3.14bugs and security fixesbugs and security fixestype-crashA hard crash of the interpreter, possibly with a core dumpA hard crash of the interpreter, possibly with a core dump
Description
Activity
- addedtype-crashA hard crash of the interpreter, possibly with a core dumpA hard crash of the interpreter, possibly with a core dump
on Aug 6, 2024 We see this in Fedora as well.
https://bugzilla.redhat.com/show_bug.cgi?id=2303107
gpgme built with Python 3.13.0b4 exhibits the same behavior when run on Python 3.13.0rc1.
Built CPython with --with-assertions.
Should not be necessary. We build Python without and the same SystemError happens.
The problem is that PyDict_Update() is called with NULL as the first argument. It's a regression in PyEval_GetLocals().
gdb traceback:
(gdb) where #0 dict_merge (interp=0x983f60 <_PyRuntime+88192>, a=a@entry=0x0, b=b@entry=0x7ffff7b34b50, override=override@entry=1) at Objects/dictobject.c:3796 #1 0x00000000004ece12 in PyDict_Update (a=a@entry=0x0, b=b@entry=0x7ffff7b34b50) at Objects/dictobject.c:3887 #2 0x0000000000607cbe in PyEval_GetLocals () at Python/ceval.c:2492 #3 0x00007ffff77ce622 in _gpg_wrap_result (fragile=fragile@entry=0x7ffff7835940, classname=classname@entry=0x7ffff77d05ab "EngineInfo") at python3.13-gpg/helpers.c:318 (gdb) frame 3 #3 0x00007ffff77ce622 in _gpg_wrap_result (fragile=fragile@entry=0x7ffff7835940, classname=classname@entry=0x7ffff77d05ab "EngineInfo") at python3.13-gpg/helpers.c:318 318 results = PyImport_ImportModuleLevel("results", PyEval_GetGlobals(), 319 PyEval_GetLocals(), from_list, 1); (gdb) frame 2 #2 0x0000000000607cbe in PyEval_GetLocals () at Python/ceval.c:2492 2492 if (PyDict_Update(ret, locals) < 0) { (gdb) l 2488 2483 PyObject *ret = f->f_locals_cache; 2484 if (ret == NULL) { 2485 PyObject *ret = PyDict_New(); 2486 if (ret == NULL) { 2487 Py_DECREF(locals); 2488 return NULL; 2489 } 2490 f->f_locals_cache = ret; 2491 } 2492 if (PyDict_Update(ret, locals) < 0) { (gdb) p ret $1 = (PyObject *) 0x0 (gdb) p locals $2 = (PyObject *) 0x7ffff7b34b50- changed the title
[-]3.13.0rc1 regression in `gpgme`: `SystemError: Objects/dictobject.c:3774: bad argument to internal function`[/-][+]3.13.0rc1 regression in PyEval_GetLocals(): `SystemError: Objects/dictobject.c:3774: bad argument to internal function`[/+]on Aug 6, 2024 - added3.13only security fixesonly security fixes3.14bugs and security fixesbugs and security fixes
on Aug 6, 2024 - added a commit that references this issue
on Aug 6, 2024 - added a commit that references this issue
on Aug 6, 2024
Metadata
Metadata
Assignees
Labels
3.13only security fixesonly security fixes3.14bugs and security fixesbugs and security fixestype-crashA hard crash of the interpreter, possibly with a core dumpA hard crash of the interpreter, possibly with a core dump
Crash report
What happened?
After upgrading to CPython 3.13.0rc1, the
gpgmetest suite started failing. The tests fail with errors resembling:I've been able to bisect it to 233ed46 (#121869). However, on this commit I'm getting also a bunch of
python3.13: Objects/typeobject.c:5257: _PyType_LookupRef: Assertion '!PyErr_Occurred()' failed.— they are fixed in some subsequent commit. But thefinal.pyfailure occurs from that commit to tip of 3.13 (fe65a8b).Now, gpgme's build system is horrible. To reproduce, I've done the following:
--with-assertions.ln -s python python3.13symlink in the build directory.Note that in order to rebuild, you need to
rm -rf python3.13-gpg.CPython versions tested on:
CPython main branch
Operating systems tested on:
Linux
Output from running 'python -VV' on the command line:
Python 3.13.0rc1 (main, Aug 2 2024, 18:56:30) [GCC 14.2.0]
Linked PRs