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 - Image-SIG@python.org http://mail.python.org/mailman/listinfo/image-sig