Hello all, I think that I found the reason of segmentation fault - incorrect determination of size that will be used by text for true type fonts and one more bug in font rendering code.
Text is drawn like this: ImageDraw.text calls font.getmask and draw bitmap returned by this function on original bitmap FreeTypeFont.getmask created empty bitmap of size returned by FreeTypeFont.getsize (i.e. _imagingft:font_getsize) and pass this bitmap to _imagingft:font_render. The problem is that for some fonts (with big slant) font_getsize returns too small size and font_render writes somewhere outside image memory that leads to segmentation fault during freeing memory. Also for fonts with backward slant rendering should start not with 0 position, but with some positive coordinate x (see attached image). I am not a font expert and unfortunately can not provide proper patch. But I would very appreciate if based on my comments somebody fix all these weird issues with fonts. Best regards, Konstantin On 5/17/06, Konstantin Shaposhnikov <[EMAIL PROTECTED]> wrote:
Hello all,
I am developing script that should display character table using given
true type font.
Unfortunately my script fails with "Segmenation fault" message for some fonts.
I have attached simplified script and font file that can be used to
reproduce problem. It seems that bug occured only for certain
characters (f.e. capital 'J').
I am using freetype-2.1.9 and imaging-1.15, but I am not sure that bug
is related to
font handling, because error occured in free(), so I suppose some
problems with memory [de]allocation.
Additionally I've created core dump and extracted back trace:
#0 0xb7cffd8f in mallopt () from /lib/libc.so.6
#1 0xb7cfed29 in free () from /lib/libc.so.6
#2 0xb7827e9d in ImagingDestroyBlock (im=0xc548d468)
at libImaging/Storage.c:307
#3 0xb7827d45 in ImagingDelete (im=0xbd3d01b8) at libImaging/Storage.c:241
#4 0xb78061d5 in _dealloc (imagep=0xb7c980a0) at _imaging.c:183
#5 0xb7eeadd3 in PyFrame_Fini () from /usr/lib/libpython2.4.so.1.0
#6 0xb7f3feee in PyEval_EvalCodeEx () from /usr/lib/libpython2.4.so.1.0
#7 0xb7f41e22 in PyEval_GetFuncDesc () from /usr/lib/libpython2.4.so.1.0
#8 0xb7f41994 in PyEval_GetFuncDesc () from /usr/lib/libpython2.4.so.1.0
#9 0xb7f3ee77 in PyEval_EvalFrame () from /usr/lib/libpython2.4.so.1.0
#10 0xb7f41f09 in PyEval_GetFuncDesc () from /usr/lib/libpython2.4.so.1.0
#11 0xb7f41994 in PyEval_GetFuncDesc () from /usr/lib/libpython2.4.so.1.0
#12 0xb7f3ee77 in PyEval_EvalFrame () from /usr/lib/libpython2.4.so.1.0
#13 0xb7f3fec5 in PyEval_EvalCodeEx () from /usr/lib/libpython2.4.so.1.0
#14 0xb7f3c975 in PyEval_EvalCode () from /usr/lib/libpython2.4.so.1.0
#15 0xb7f76189 in PyRun_FileExFlags () from /usr/lib/libpython2.4.so.1.0
#16 0xb7f755f3 in PyRun_SimpleFileExFlags () from /usr/lib/libpython2.4.so.1.0
#17 0xb7f74fb8 in PyRun_AnyFileExFlags () from /usr/lib/libpython2.4.so.1.0
#18 0xb7f7e2c1 in Py_Main () from /usr/lib/libpython2.4.so.1.0
#19 0x080486b9 in main ()
Any help and suggestions are highly appreciated.
Regards,
Konstantin
--
http://step-inside.org
-- http://step-inside.org
test.png
Description: PNG image
_______________________________________________ Image-SIG maillist - [email protected] http://mail.python.org/mailman/listinfo/image-sig
