UnicodeString with unknown encoding causes segfault
Created by: jwilk
This program causes segmentation fault:
import icu
while 1:
try:
icu.UnicodeString(b'', 'moo')
except:
pass
Backtrace:
#0 0x00000000004a62d7 in PyObject_GC_UnTrack (op=0x7ffff7e850e0) at ../Modules/gcmodule.c:1482
#1 0x00000000004e41b3 in tupledealloc.lto_priv.397 (op=0x7ffff7e850e0) at ../Objects/tupleobject.c:217
#2 BaseException_clear.lto_priv.69 (self=0x7ffff7e60a00) at ../Objects/exceptions.c:75
#3 BaseException_dealloc.lto_priv.67 () at ../Objects/exceptions.c:84
#4 0x00000000004fd4da in subtype_dealloc.lto_priv () at ../Objects/typeobject.c:1050
#5 0x00000000004a0b12 in insertdict_by_entry.lto_priv.1410 (value=<ICUError at remote 0x7ffff7e60a50>, ep=<optimized out>, hash=<optimized out>, key='exc_value', mp=0x7ffff7fe5280) at ../Objects/dictobject.c:519
#6 insertdict.lto_priv.1282 (value=<ICUError at remote 0x7ffff7e60a50>, hash=<optimized out>, key='exc_value', mp=0x7ffff7fe5280) at ../Objects/dictobject.c:556
#7 dict_set_item_by_hash_or_entry (value=<ICUError at remote 0x7ffff7e60a50>, ep=0x0, hash=<optimized out>, key='exc_value', op= {'setrecursionlimit': <built-in function setrecursionlimit>, 'dont_write_bytecode': False, 'getrefcount': <built-in function getrefcount>, 'long_info': <sys.long_info at remote 0x7ffff7fb1530>, 'path_importer_cache': {'/usr/lib/python2.7/lib-old': <imp.NullImporter at remote 0x7ffff7ec6040>, '/usr/local/lib/python2.7/dist-packages': None, '/usr/lib/python2.7/encodings': None, '/usr/lib/python2.7/plat-x86_64-linux-gnu': None, '/home/jwilk': None, '/usr/lib/python2.7/lib-tk': None, '/usr/lib/python2.7/lib-dynload': None, 'test.py': <imp.NullImporter at remote 0x7ffff7ec6050>, '/usr/lib/python2.7/dist-packages': None, '/usr/lib/python2.7': None, '/usr/lib/python2.7/': None}, 'stdout': <file at remote 0x7ffff7fcd150>, 'getprofile': <built-in function getprofile>, '__stdin__': <file at remote 0x7ffff7fcd0c0>, 'version_info': <sys.version_info at remote 0x7ffff7fb0f70>, 'exc_clear': <built-in function exc_clear>, 'prefix': '/usr', 'getfilesystemencoding': <built-in function getfilesystemencoding>, 'byteorder': 'lit...(truncated)) at ../Objects/dictobject.c:795
#8 PyDict_SetItem () at ../Objects/dictobject.c:848
#9 0x00000000004a451c in PyDict_SetItemString () at ../Objects/dictobject.c:2469
#10 0x00000000004ca8f4 in set_exc_info (tb=<traceback at remote 0x7ffff7eac8c0>, value=<ICUError at remote 0x7ffff7e60a50>, type=<type at remote 0xa24fe0>, tstate=0x9840a0) at ../Python/ceval.c:3737
#11 PyEval_EvalFrameEx () at ../Python/ceval.c:3251
#12 0x00000000004c2215 in PyEval_EvalCodeEx () at ../Python/ceval.c:3582
#13 0x00000000004c1fb9 in PyEval_EvalCode (co=<optimized out>, globals=<optimized out>, locals=<optimized out>) at ../Python/ceval.c:669
#14 0x00000000004f193f in run_mod.lto_priv () at ../Python/pythonrun.c:1376
#15 0x00000000004ec252 in PyRun_FileExFlags () at ../Python/pythonrun.c:1362
#16 0x00000000004eaa21 in PyRun_SimpleFileExFlags () at ../Python/pythonrun.c:948
#17 0x000000000049dde8 in Py_Main () at ../Modules/main.c:640
#18 0x00007ffff6f14730 in __libc_start_main () from /lib/x86_64-linux-gnu/libc.so.6
#19 0x000000000049d639 in _start ()
Tested with PyICU 1.9.3, ICU 55.1.