[issue14903] dictobject infinite loop in module set-up

Max Khon report at bugs.python.org
Wed Jul 20 08:21:40 EDT 2016


Max Khon added the comment:

I reproduced the problem with Python 2.7.5 as shipped with CentOS 7:

root at 192.168.0.86 /home/padmin # python -V
Python 2.7.5
root at 192.168.0.86 /home/padmin # rpm -q python
python-2.7.5-34.el7.x86_64
root at 192.168.0.86 /home/padmin # 

(gdb) bt
#0  lookdict_string (mp=<optimized out>, key='RPMTAG_OPTFLAGS', hash=411442822543039667)
    at /usr/src/debug/Python-2.7.5/Objects/dictobject.c:461
#1  0x00007f92d6d9f2c9 in insertdict (mp=0x2502600, key='RPMTAG_OPTFLAGS', hash=411442822543039667, 
    value=1122) at /usr/src/debug/Python-2.7.5/Objects/dictobject.c:559
#2  0x00007f92d6d9f3b0 in dict_set_item_by_hash_or_entry (
    op={'RPMTAG_HEADERREGIONS': 64, 'RPMTAG_EXCLUSIVEOS': 1062, 'fi': <type at remote 0x7f92c87ef6c0>, 'RPMTAG_CHANGELOGNAME': 1081, 'RPMTAG_CONFLICTNEVRS': 5044, 'RPMTAG_FILECAPS': 5010, 'RPMTAG_FILERDEVS': 1033, 'RPMTAG_COLLECTIONS': 5029, 'RPMTAG_BUGURL': 5012, 'setStats': <built-in function setStats>, 'RPMTAG_FILEDIGESTALGO': 5011, 'RPMTAG_DEPENDSDICT': 1145, 'RPMTAG_CLASSDICT': 1142, 'RPMTAG_FILEMODES': 1030, 'RPMTAG_FILEDEPENDSN': 1144, 'RPMTAG_BUILDTIME': 1006, 'ii': <type at remote 0x7f92c87f0280>, 'RPMTAG_INSTALLCOLOR': 1127, 'RPMTAG_CHANGELOGTEXT': 1082, 'RPMTAG_HEADERCOLOR': 5017, 'RPMTAG_CONFLICTNAME': 1054, 'RPMTAG_CONFLICTS': 1054, 'setLogFile': <built-in function setLogFile>, 'versionCompare': <built-in function versionCompare>, 'RPMTAG_CONFLICTVERSION': 1055, 'RPMTAG_NVRA': 1196, 'RPMTAG_NOPATCH': 1052, 'RPMTAG_HEADERI18NTABLE': 100, 'RPMTAG_LONGARCHIVESIZE': 271, 'RPMTAG_FILEREQUIRE': 5002, 'RPMTAG_FILEDEPENDSX': 1143, 'RPMTAG_EVR': 5013, 'RPMTAG_INSTALLTIME': 1008, 'RPMTAG_NAME': 1000, 'RPMTAG_LONG...(truncated), key=<optimized out>, hash=<optimized out>, 
    ep=<optimized out>, value=<optimized out>) at /usr/src/debug/Python-2.7.5/Objects/dictobject.c:774
#3  0x00007f92d6da18a8 in PyDict_SetItemString (
    v={'RPMTAG_HEADERREGIONS': 64, 'RPMTAG_EXCLUSIVEOS': 1062, 'fi': <type at remote 0x7f92c87ef6c0>, 'RPMTAG_CHANGELOGNAME': 1081, 'RPMTAG_CONFLICTNEVRS': 5044, 'RPMTAG_FILECAPS': 5010, 'RPMTAG_FILERDEVS': 1033, 'RPMTAG_COLLECTIONS': 5029, 'RPMTAG_BUGURL': 5012, 'setStats': <built-in function setStats>, 'RPMTAG_FILEDIGESTALGO': 5011, 'RPMTAG_DEPENDSDICT': 1145, 'RPMTAG_CLASSDICT': 1142, 'RPMTAG_FILEMODES': 1030, 'RPMTAG_FILEDEPENDSN': 1144, 'RPMTAG_BUILDTIME': 1006, 'ii': <type at remote 0x7f92c87f0280>, 'RPMTAG_INSTALLCOLOR': 1127, 'RPMTAG_CHANGELOGTEXT': 1082, 'RPMTAG_HEADERCOLOR': 5017, 'RPMTAG_CONFLICTNAME': 1054, 'RPMTAG_CONFLICTS': 1054, 'setLogFile': <built-in function setLogFile>, 'versionCompare': <built-in function versionCompare>, 'RPMTAG_CONFLICTVERSION': 1055, 'RPMTAG_NVRA': 1196, 'RPMTAG_NOPATCH': 1052, 'RPMTAG_HEADERI18NTABLE': 100, 'RPMTAG_LONGARCHIVESIZE': 271, 'RPMTAG_FILEREQUIRE': 5002, 'RPMTAG_FILEDEPENDSX': 1143, 'RPMTAG_EVR': 5013, 'RPMTAG_INSTALLTIME': 1008, 'RPMTAG_NAME': 1000, 'RPMTAG_LONG...(truncated), key=key at entry=0x7f92c83bf537 "RPMTAG_OPTFLAGS", 
    item=item at entry=1122) at /usr/src/debug/Python-2.7.5/Objects/dictobject.c:2448
#4  0x00007f92d6e181f2 in PyModule_AddObject (m=m at entry=<module at remote 0x24d35c8>, 
    name=name at entry=0x7f92c83bf537 "RPMTAG_OPTFLAGS", o=o at entry=1122)
    at /usr/src/debug/Python-2.7.5/Python/modsupport.c:616
#5  0x00007f92d6e182d8 in PyModule_AddIntConstant (m=m at entry=<module at remote 0x24d35c8>, 
    name=name at entry=0x7f92c83bf537 "RPMTAG_OPTFLAGS", value=value at entry=1122)
    at /usr/src/debug/Python-2.7.5/Python/modsupport.c:628
#6  0x00007f92c85e2b20 in addRpmTags (module=<module at remote 0x24d35c8>) at rpmmodule.c:200
#7  initModule (m=<module at remote 0x24d35c8>) at rpmmodule.c:343
#8  init_rpm () at rpmmodule.c:281
#9  0x00007f92d6e13ed9 in _PyImport_LoadDynamicModule (name=name at entry=0x24f69d0 "rpm._rpm", 
    pathname=pathname at entry=0x24f79e0 "/usr/lib64/python2.7/site-packages/rpm/_rpmmodule.so", 
    fp=<optimized out>) at /usr/src/debug/Python-2.7.5/Python/importdl.c:53
...

The infinite loop happens when "import rpm" is called in low-memory conditions (e.g. when handling ENOMEM or exceptions.MemoryError - RedHat/CentOS abrt-addon-python package which installs sys.excepthook handler).

----------
nosy: +Max Khon

_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue14903>
_______________________________________


More information about the Python-bugs-list mailing list