[pypy-issue] [issue1679] Segfault on 32bit pypy
tracker at bugs.pypy.org
Thu Jan 23 10:24:02 CET 2014
Armin Rigo <armin.rigo at gmail.com> added the comment:
Ok, found it. You are calling FT_New_Memory_Face() with the font_bytes being a
pointer just returned from PyArg_ParseTuple(..."s#"...), but you're not keeping
alive the object that held that memory. CPython is "more or less safe" because
you call core.getfont(.., self.font_bytes) and thus keep the font_bytes string
alive as needed --- assuming, reasonably, that nobody does "font.font_bytes =
None" behind your back. This doesn't work in PyPy because the data in the
font_bytes object is copied from GC memory to non-movable memory before the call
to core.getfont(), and freed afterwards.
I'd suggest that you change this to make the C-level FontObject keep a reference
to the font_bytes, rather than the Python-level FreeTypeFont.
PyPy bug tracker <tracker at bugs.pypy.org>
More information about the pypy-issue