[GRASS5] Freetype failure

roger at spinn.net roger at spinn.net
Mon Mar 27 11:56:31 EST 2006


Folks, 

A couple weeks ago I wrote for help with my problem using freetype.  In 
short, when I tried to display characters using the freetype library the X 
driver crashed.  I later found that the PNG driver had the same behavior. 

In the absence of input, I managed to track the problem down to 
grass-6.0.2/display/drivers/lib/Text3.c (currently renamed to text3.c).  The 
convert_str function calls iconv.  The third and fifth parameters in the 
iconv prototype are pointers to size_t variables.  The convert_str function 
instead passed pointers to int.  iconv misinterpreted the values and that 
lead to a corruption of the code.  With the parameters changed to size_t the 
code works OK. 

This is the first problem I recall arising from using int and size_t 
interchangeably.  This may reflect my environment (gcc 4.0.2 prerelease, GNU 
libc 2.3.5, SuSE Linux 10.0 on AMD64). 

The initial fix was pretty easy, but in studying the code I found other 
problems (e.g., arguments to memset in convert_str are in the wrong order).  
Also, the approach in the code to be rather indirect.  It works by 
converting UTF-8 codes to UCS-2BE codes and then converting the UCS-2BE 
codes to FT_ULong for the freetype library.  Not all UTF-8 codes can be 
represented in UCS-2BE. 

I wrote a UTF-8 to FT_ULong converter to get a more direct solution and 
eliminated convert_str from the code.  This is a working solution and 
probably in most respects a better solution than the current text3.c. 

I no longer maintain a CVS installation of GRASS but I think these changes 
need to be made.  I can provide the code to someone who can introduce it to 
CVS.  As it stands the code is largely complete.  I would like it to be 
checked by someone who is a more proficient programmer than I. To be 
formally complete the UTF-8 decoder needs code added to catch malformed 
UTF-8 2-byte codes in the range of 0xD800 to 0xDFFF.  I think other 
malformations are caught by my existing code, but their efficiency might be 
improved. 


Roger Miller




More information about the grass-dev mailing list