-
Notifications
You must be signed in to change notification settings - Fork 682
Closed
Description
After #90 I can get most of the *_from_string() function to work from Python, except language_from_string() which cases a “double free or corruption” crash. Running under valgrind shows the following:
==27049== Invalid free() / delete / delete[] / realloc()
==27049== at 0x4C2B200: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==27049== by 0x770363A: g_boxed_free (in /usr/lib/libgobject-2.0.so.0.4200.2)
==27049== by 0x7099C5F: boxed_del (pygi-boxed.c:45)
==27049== by 0x4E808C2: PyObject_Call (in /usr/lib/libpython2.7.so.1.0)
==27049== by 0x4F11BB6: PyEval_CallObjectWithKeywords (in /usr/lib/libpython2.7.so.1.0)
==27049== by 0x4ED6C2B: slot_tp_del (in /usr/lib/libpython2.7.so.1.0)
==27049== by 0x4ED1C89: subtype_dealloc (in /usr/lib/libpython2.7.so.1.0)
==27049== by 0x4ECFED9: tupledealloc (in /usr/lib/libpython2.7.so.1.0)
==27049== by 0x4F15C30: PyEval_EvalFrameEx (in /usr/lib/libpython2.7.so.1.0)
==27049== by 0x4F18AEF: PyEval_EvalCodeEx (in /usr/lib/libpython2.7.so.1.0)
==27049== by 0x4F16FE3: PyEval_EvalFrameEx (in /usr/lib/libpython2.7.so.1.0)
==27049== by 0x4F170E9: PyEval_EvalFrameEx (in /usr/lib/libpython2.7.so.1.0)
==27049== Address 0x9f18ce0 is 0 bytes inside a block of size 3 free'd
==27049== at 0x4C2B200: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==27049== by 0x770363A: g_boxed_free (in /usr/lib/libgobject-2.0.so.0.4200.2)
==27049== by 0x7099C5F: boxed_del (pygi-boxed.c:45)
==27049== by 0x4E808C2: PyObject_Call (in /usr/lib/libpython2.7.so.1.0)
==27049== by 0x4F11BB6: PyEval_CallObjectWithKeywords (in /usr/lib/libpython2.7.so.1.0)
==27049== by 0x4ED6C2B: slot_tp_del (in /usr/lib/libpython2.7.so.1.0)
==27049== by 0x4ED1C89: subtype_dealloc (in /usr/lib/libpython2.7.so.1.0)
==27049== by 0x4ECFED9: tupledealloc (in /usr/lib/libpython2.7.so.1.0)
==27049== by 0x4F15C30: PyEval_EvalFrameEx (in /usr/lib/libpython2.7.so.1.0)
==27049== by 0x4F18AEF: PyEval_EvalCodeEx (in /usr/lib/libpython2.7.so.1.0)
==27049== by 0x4F16FE3: PyEval_EvalFrameEx (in /usr/lib/libpython2.7.so.1.0)
==27049== by 0x4F170E9: PyEval_EvalFrameEx (in /usr/lib/libpython2.7.so.1.0)
and
==27049== Invalid free() / delete / delete[] / realloc()
==27049== at 0x4C2B200: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==27049== by 0xA22AADB: finish (hb-common.cc:229)
==27049== by 0xA22AADB: free_langs() (hb-common.cc:243)
==27049== by 0x5455DB1: __run_exit_handlers (in /usr/lib/libc-2.21.so)
==27049== by 0x5455E04: exit (in /usr/lib/libc-2.21.so)
==27049== by 0x5440806: (below main) (in /usr/lib/libc-2.21.so)
==27049== Address 0x9f1e7b0 is 0 bytes inside a block of size 3 free'd
==27049== at 0x4C2B200: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==27049== by 0x770363A: g_boxed_free (in /usr/lib/libgobject-2.0.so.0.4200.2)
==27049== by 0x7099C5F: boxed_del (pygi-boxed.c:45)
==27049== by 0x4E808C2: PyObject_Call (in /usr/lib/libpython2.7.so.1.0)
==27049== by 0x4F11BB6: PyEval_CallObjectWithKeywords (in /usr/lib/libpython2.7.so.1.0)
==27049== by 0x4ED6C2B: slot_tp_del (in /usr/lib/libpython2.7.so.1.0)
==27049== by 0x4ED1C89: subtype_dealloc (in /usr/lib/libpython2.7.so.1.0)
==27049== by 0x4ECFED9: tupledealloc (in /usr/lib/libpython2.7.so.1.0)
==27049== by 0x4F15C30: PyEval_EvalFrameEx (in /usr/lib/libpython2.7.so.1.0)
==27049== by 0x4F18AEF: PyEval_EvalCodeEx (in /usr/lib/libpython2.7.so.1.0)
==27049== by 0x4F16FE3: PyEval_EvalFrameEx (in /usr/lib/libpython2.7.so.1.0)
==27049== by 0x4F170E9: PyEval_EvalFrameEx (in /usr/lib/libpython2.7.so.1.0)
I can not really tell what is going on, but it looks like a mismatch between the way the string is allocated and the use of free() here, or a double free. May be there is a magic Introspection keyword to fix this but I don’t know what is it (I tried (transfer full) but it made no difference).
Metadata
Metadata
Assignees
Labels
No labels