* src/pshinter/pshalgo.c: remove a stupid typo that results in no

hinting and a memory leak with some large Asian CFF fonts

        * src/base/ftobjs.c (FT_Done_Library): remove a subtle memory leak
        which happens when FT_Done_Library is called with opened CFF_Faces in
        it. We need to close all faces before destroying the modules, or else
        some bad things (memory leaks) may happen.
This commit is contained in:
David Turner 2007-01-04 16:46:46 +00:00
parent 6b87e6f0ff
commit a8cf42bb7a
3 changed files with 40 additions and 2 deletions

View File

@ -1,3 +1,13 @@
2007-01-04 David Turner <david@freetype.org>
* src/pshinter/pshalgo.c: remove a stupid typo that results in no
hinting and a memory leak with some large Asian CFF fonts
* src/base/ftobjs.c (FT_Done_Library): remove a subtle memory leak
which happens when FT_Done_Library is called with opened CFF_Faces in
it. We need to close all faces before destroying the modules, or else
some bad things (memory leaks) may happen.
2007-01-02 Werner Lemberg <wl@gnu.org>
* src/gxvalid/gxvkern.c (gxv_kern_subtable_fmt0_pairs_validate):

View File

@ -3758,7 +3758,35 @@
if ( library->generic.finalizer )
library->generic.finalizer( library );
/* Close all modules in the library */
/* Close all faces in the library. if we don't do
* this, we can have some subtle memory leaks.
* for example:
*
* - the cff font driver uses the pshinter module in cff_size_done
* - if the pshinter module is destroyed before the cff font driver,
* opened FT_Face objects managed by the driver will not be properly
* destroyed, resulting in a memory leak
*/
{
FT_UInt n;
for ( n = 0; n < library->num_modules; n++ )
{
FT_Module module = library->modules[n];
FT_List faces;
if ( (module->clazz->module_flags & FT_MODULE_FONT_DRIVER) == 0 )
continue;
faces = &FT_DRIVER(module)->faces_list;
while ( faces->head ) {
FT_Done_Face( FT_FACE(faces->head->data) );
}
}
}
/* Close all other modules in the library */
#if 1
/* XXX Modules are removed in the reversed order so that */
/* type42 module is removed before truetype module. This */

View File

@ -1866,7 +1866,7 @@
FT_Error error;
if ( !FT_NEW_ARRAY( strongs, num_strongs ) )
if ( FT_NEW_ARRAY( strongs, num_strongs ) )
return;
}