* src/truetype/ttgload.c (load_truetype_glyph): fixed a bug in the

composite loader spotted by Keith Packard.
This commit is contained in:
David Turner 2001-05-16 17:49:07 +00:00
parent 66cb4790bf
commit 61d6b2b9aa
3 changed files with 38 additions and 23 deletions

View File

@ -1,3 +1,8 @@
2001-05-16 David Turner <david@freetype.org>
* src/truetype/ttgload.c (load_truetype_glyph): fixed a bug in the
composite loader spotted by Keith Packard.
2001-05-14 David Turner <david@freetype.org>
* src/base/ftcalc.c (FT_DivFix): fixed a bug in the 64-bit code that

View File

@ -423,22 +423,23 @@
FT_Outline* current = &loader->current.outline;
FT_Bool adjust = 1;
FT_UInt new_max;
FT_UInt new_max, old_max;
/* check points & tags */
new_max = base->n_points + current->n_points + n_points;
if ( new_max > loader->max_points )
old_max = loader->max_points;
if ( new_max > old_max )
{
new_max = ( new_max + 7 ) & -8;
if ( REALLOC_ARRAY( base->points, base->n_points,
new_max, FT_Vector ) ||
REALLOC_ARRAY( base->tags, base->n_points,
new_max, FT_Byte ) )
if ( REALLOC_ARRAY( base->points, old_max, new_max, FT_Vector ) ||
REALLOC_ARRAY( base->tags, old_max, new_max, FT_Byte ) )
goto Exit;
if ( loader->use_extra &&
REALLOC_ARRAY( loader->base.extra_points, base->n_points,
REALLOC_ARRAY( loader->base.extra_points, old_max,
new_max, FT_Vector ) )
goto Exit;
@ -447,13 +448,13 @@
}
/* check contours */
old_max = loader->max_contours;
new_max = base->n_contours + current->n_contours +
n_contours;
if ( new_max > loader->max_contours )
if ( new_max > old_max )
{
new_max = ( new_max + 3 ) & -4;
if ( REALLOC_ARRAY( base->contours, base->n_contours,
new_max, FT_Short ) )
if ( REALLOC_ARRAY( base->contours, old_max, new_max, FT_Short ) )
goto Exit;
adjust = 1;
@ -478,18 +479,18 @@
{
FT_Memory memory = loader->memory;
FT_Error error = FT_Err_Ok;
FT_UInt new_max;
FT_UInt new_max, old_max;
FT_GlyphLoad* base = &loader->base;
FT_GlyphLoad* current = &loader->current;
new_max = base->num_subglyphs + current->num_subglyphs + n_subs;
if ( new_max > loader->max_subglyphs )
old_max = loader->max_subglyphs;
if ( new_max > old_max )
{
new_max = ( new_max + 1 ) & -2;
if ( REALLOC_ARRAY( base->subglyphs, base->num_subglyphs,
new_max, FT_SubGlyph ) )
if ( REALLOC_ARRAY( base->subglyphs, old_max, new_max, FT_SubGlyph ) )
goto Exit;
loader->max_subglyphs = new_max;

View File

@ -891,6 +891,7 @@
if ( error )
goto Fail;
/* restore subglyph pointer */
subglyph = gloader->base.subglyphs + num_base_subgs + n;
if ( subglyph->flags & USE_MY_METRICS )
@ -971,8 +972,16 @@
}
}
translate_array( num_new_points, loader->zone.cur, x, y );
cur_to_org( num_new_points, &loader->zone );
if ( x | y )
{
translate_array( num_new_points,
gloader->base.outline.points + num_base_points,
x, y );
translate_array( num_new_points,
gloader->base.extra_points + num_base_points,
x, y );
}
}
/*******************************************************************/