Commit 1a242558 authored by Chris Liddell's avatar Chris Liddell Committed by Werner Lemberg
Browse files

[base] Improve error handling in `FT_GlyphLoader_CheckPoints`.

If `FT_GlyphLoader_CreateExtra` returns an error (and a couple of other
places), `FT_GlyphLoader_CheckPoints` would propagate the error immediately,
rather than cleaning up the partially set up `FT_GlyphLoader`.  As a
consequence, a subsequent attempt to create a glyph could result in a crash.

* src/base/ftgloadr.c (FT_GlyphLoader_CheckPoints): Ensure all the error
conditions exits are consistent, eventually calling `FT_GlyphLoader_Reset`.
parent 55a97b0c
Pipeline #628472 passed with stage
in 9 minutes and 50 seconds
......@@ -217,7 +217,7 @@
error = FT_GlyphLoader_CreateExtra( loader );
if ( error )
return error;
goto Exit;
/* check points & tags */
new_max = (FT_UInt)base->n_points + (FT_UInt)current->n_points +
......@@ -229,7 +229,10 @@
new_max = FT_PAD_CEIL( new_max, 8 );
if ( new_max > FT_OUTLINE_POINTS_MAX )
return FT_THROW( Array_Too_Large );
{
error = FT_THROW( Array_Too_Large );
goto Exit;
}
if ( FT_RENEW_ARRAY( base->points, old_max, new_max ) ||
FT_RENEW_ARRAY( base->tags, old_max, new_max ) )
......@@ -254,7 +257,7 @@
error = FT_GlyphLoader_CreateExtra( loader );
if ( error )
return error;
goto Exit;
/* check contours */
old_max = loader->max_contours;
......@@ -265,7 +268,10 @@
new_max = FT_PAD_CEIL( new_max, 4 );
if ( new_max > FT_OUTLINE_CONTOURS_MAX )
return FT_THROW( Array_Too_Large );
{
error = FT_THROW( Array_Too_Large );
goto Exit;
}
if ( FT_RENEW_ARRAY( base->contours, old_max, new_max ) )
goto Exit;
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment