From 41bd254198b8b879a562a85f7dc868c3c0f7fbc1 Mon Sep 17 00:00:00 2001 From: marha Date: Mon, 12 Mar 2012 10:33:22 +0100 Subject: Updated to freetype-2.4.9 --- freetype/src/type1/t1afm.c | 5 ++- freetype/src/type1/t1driver.c | 57 +++++++++++++++++---------------- freetype/src/type1/t1errors.h | 3 +- freetype/src/type1/t1gload.c | 74 ++++++++++++++++++++++--------------------- freetype/src/type1/t1gload.h | 10 +++--- freetype/src/type1/t1load.c | 16 ++++++---- freetype/src/type1/t1objs.c | 52 ++++++++++++++++++++---------- freetype/src/type1/t1objs.h | 31 ++++++------------ freetype/src/type1/t1parse.c | 14 ++++++-- 9 files changed, 142 insertions(+), 120 deletions(-) (limited to 'freetype/src/type1') diff --git a/freetype/src/type1/t1afm.c b/freetype/src/type1/t1afm.c index 780ab33bf..1fff15d73 100644 --- a/freetype/src/type1/t1afm.c +++ b/freetype/src/type1/t1afm.c @@ -4,8 +4,7 @@ /* */ /* AFM support for Type 1 fonts (body). */ /* */ -/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, */ -/* 2010 by */ +/* Copyright 1996-2011 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -252,7 +251,7 @@ fi->Descender = t1_font->font_bbox.yMin; psaux = (PSAux_Service)( (T1_Face)t1_face )->psaux; - if ( psaux && psaux->afm_parser_funcs ) + if ( psaux->afm_parser_funcs ) { error = psaux->afm_parser_funcs->init( &parser, stream->memory, diff --git a/freetype/src/type1/t1driver.c b/freetype/src/type1/t1driver.c index 79516aa3e..e35d7b11d 100644 --- a/freetype/src/type1/t1driver.c +++ b/freetype/src/type1/t1driver.c @@ -195,7 +195,7 @@ if ( idx < sizeof ( type1->font_matrix ) / sizeof ( type1->font_matrix.xx ) ) { - FT_Fixed val; + FT_Fixed val = 0; retval = sizeof ( val ); @@ -225,7 +225,7 @@ if ( idx < sizeof ( type1->font_bbox ) / sizeof ( type1->font_bbox.xMin ) ) { - FT_Fixed val; + FT_Fixed val = 0; retval = sizeof ( val ); @@ -607,11 +607,11 @@ }; - static FT_Module_Interface - Get_Interface( FT_Driver driver, + FT_CALLBACK_DEF( FT_Module_Interface ) + Get_Interface( FT_Module module, const FT_String* t1_interface ) { - FT_UNUSED( driver ); + FT_UNUSED( module ); return ft_service_list_lookup( t1_services, t1_interface ); } @@ -652,11 +652,14 @@ /* They can be implemented by format-specific interfaces. */ /* */ static FT_Error - Get_Kerning( T1_Face face, + Get_Kerning( FT_Face t1face, /* T1_Face */ FT_UInt left_glyph, FT_UInt right_glyph, FT_Vector* kerning ) { + T1_Face face = (T1_Face)t1face; + + kerning->x = 0; kerning->y = 0; @@ -681,7 +684,7 @@ FT_MODULE_DRIVER_SCALABLE | FT_MODULE_DRIVER_HAS_HINTER, - sizeof( FT_DriverRec ), + sizeof ( FT_DriverRec ), "type1", 0x10000L, @@ -689,38 +692,38 @@ 0, /* format interface */ - (FT_Module_Constructor)T1_Driver_Init, - (FT_Module_Destructor) T1_Driver_Done, - (FT_Module_Requester) Get_Interface, + T1_Driver_Init, + T1_Driver_Done, + Get_Interface, }, - sizeof( T1_FaceRec ), - sizeof( T1_SizeRec ), - sizeof( T1_GlyphSlotRec ), + sizeof ( T1_FaceRec ), + sizeof ( T1_SizeRec ), + sizeof ( T1_GlyphSlotRec ), - (FT_Face_InitFunc) T1_Face_Init, - (FT_Face_DoneFunc) T1_Face_Done, - (FT_Size_InitFunc) T1_Size_Init, - (FT_Size_DoneFunc) T1_Size_Done, - (FT_Slot_InitFunc) T1_GlyphSlot_Init, - (FT_Slot_DoneFunc) T1_GlyphSlot_Done, + T1_Face_Init, + T1_Face_Done, + T1_Size_Init, + T1_Size_Done, + T1_GlyphSlot_Init, + T1_GlyphSlot_Done, #ifdef FT_CONFIG_OPTION_OLD_INTERNALS ft_stub_set_char_sizes, ft_stub_set_pixel_sizes, #endif - (FT_Slot_LoadFunc) T1_Load_Glyph, + T1_Load_Glyph, #ifdef T1_CONFIG_OPTION_NO_AFM - (FT_Face_GetKerningFunc) 0, - (FT_Face_AttachFunc) 0, + 0, /* FT_Face_GetKerningFunc */ + 0, /* FT_Face_AttachFunc */ #else - (FT_Face_GetKerningFunc) Get_Kerning, - (FT_Face_AttachFunc) T1_Read_Metrics, + Get_Kerning, + T1_Read_Metrics, #endif - (FT_Face_GetAdvancesFunc) T1_Get_Advances, - (FT_Size_RequestFunc) T1_Size_Request, - (FT_Size_SelectFunc) 0 + T1_Get_Advances, + T1_Size_Request, + 0 /* FT_Size_SelectFunc */ }; diff --git a/freetype/src/type1/t1errors.h b/freetype/src/type1/t1errors.h index 81221c343..8740530ee 100644 --- a/freetype/src/type1/t1errors.h +++ b/freetype/src/type1/t1errors.h @@ -4,7 +4,7 @@ /* */ /* Type 1 error codes (specification only). */ /* */ -/* Copyright 2001 by */ +/* Copyright 2001, 2012 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -29,6 +29,7 @@ #undef __FTERRORS_H__ +#undef FT_ERR_PREFIX #define FT_ERR_PREFIX T1_Err_ #define FT_ERR_BASE FT_Mod_Err_Type1 diff --git a/freetype/src/type1/t1gload.c b/freetype/src/type1/t1gload.c index f3fad4f5d..80e545331 100644 --- a/freetype/src/type1/t1gload.c +++ b/freetype/src/type1/t1gload.c @@ -208,12 +208,13 @@ FT_LOCAL_DEF( FT_Error ) - T1_Get_Advances( T1_Face face, + T1_Get_Advances( FT_Face t1face, /* T1_Face */ FT_UInt first, FT_UInt count, - FT_ULong load_flags, + FT_Int32 load_flags, FT_Fixed* advances ) { + T1_Face face = (T1_Face)t1face; T1_DecoderRec decoder; T1_Font type1 = &face->type1; PSAux_Service psaux = (PSAux_Service)face->psaux; @@ -265,14 +266,15 @@ FT_LOCAL_DEF( FT_Error ) - T1_Load_Glyph( T1_GlyphSlot glyph, - T1_Size size, + T1_Load_Glyph( FT_GlyphSlot t1glyph, /* T1_GlyphSlot */ + FT_Size t1size, /* T1_Size */ FT_UInt glyph_index, FT_Int32 load_flags ) { + T1_GlyphSlot glyph = (T1_GlyphSlot)t1glyph; FT_Error error; T1_DecoderRec decoder; - T1_Face face = (T1_Face)glyph->root.face; + T1_Face face = (T1_Face)t1glyph->face; FT_Bool hinting; T1_Font type1 = &face->type1; PSAux_Service psaux = (PSAux_Service)face->psaux; @@ -303,10 +305,10 @@ if ( load_flags & FT_LOAD_NO_RECURSE ) load_flags |= FT_LOAD_NO_SCALE | FT_LOAD_NO_HINTING; - if ( size ) + if ( t1size ) { - glyph->x_scale = size->root.metrics.x_scale; - glyph->y_scale = size->root.metrics.y_scale; + glyph->x_scale = t1size->metrics.x_scale; + glyph->y_scale = t1size->metrics.y_scale; } else { @@ -314,18 +316,18 @@ glyph->y_scale = 0x10000L; } - glyph->root.outline.n_points = 0; - glyph->root.outline.n_contours = 0; + t1glyph->outline.n_points = 0; + t1glyph->outline.n_contours = 0; hinting = FT_BOOL( ( load_flags & FT_LOAD_NO_SCALE ) == 0 && ( load_flags & FT_LOAD_NO_HINTING ) == 0 ); - glyph->root.format = FT_GLYPH_FORMAT_OUTLINE; + t1glyph->format = FT_GLYPH_FORMAT_OUTLINE; error = decoder_funcs->init( &decoder, - (FT_Face)face, - (FT_Size)size, - (FT_GlyphSlot)glyph, + t1glyph->face, + t1size, + t1glyph, (FT_Byte**)type1->glyph_names, face->blend, FT_BOOL( hinting ), @@ -368,19 +370,19 @@ /* bearing the yMax */ if ( !error ) { - glyph->root.outline.flags &= FT_OUTLINE_OWNER; - glyph->root.outline.flags |= FT_OUTLINE_REVERSE_FILL; + t1glyph->outline.flags &= FT_OUTLINE_OWNER; + t1glyph->outline.flags |= FT_OUTLINE_REVERSE_FILL; /* for composite glyphs, return only left side bearing and */ /* advance width */ if ( load_flags & FT_LOAD_NO_RECURSE ) { - FT_Slot_Internal internal = glyph->root.internal; + FT_Slot_Internal internal = t1glyph->internal; - glyph->root.metrics.horiBearingX = + t1glyph->metrics.horiBearingX = FIXED_TO_INT( decoder.builder.left_bearing.x ); - glyph->root.metrics.horiAdvance = + t1glyph->metrics.horiAdvance = FIXED_TO_INT( decoder.builder.advance.x ); internal->glyph_matrix = font_matrix; @@ -390,45 +392,45 @@ else { FT_BBox cbox; - FT_Glyph_Metrics* metrics = &glyph->root.metrics; + FT_Glyph_Metrics* metrics = &t1glyph->metrics; FT_Vector advance; /* copy the _unscaled_ advance width */ metrics->horiAdvance = FIXED_TO_INT( decoder.builder.advance.x ); - glyph->root.linearHoriAdvance = + t1glyph->linearHoriAdvance = FIXED_TO_INT( decoder.builder.advance.x ); - glyph->root.internal->glyph_transformed = 0; + t1glyph->internal->glyph_transformed = 0; - if ( load_flags & FT_LOAD_VERTICAL_LAYOUT ) + if ( load_flags & FT_LOAD_VERTICAL_LAYOUT ) { /* make up vertical ones */ metrics->vertAdvance = ( face->type1.font_bbox.yMax - face->type1.font_bbox.yMin ) >> 16; - glyph->root.linearVertAdvance = metrics->vertAdvance; + t1glyph->linearVertAdvance = metrics->vertAdvance; } else { metrics->vertAdvance = FIXED_TO_INT( decoder.builder.advance.y ); - glyph->root.linearVertAdvance = + t1glyph->linearVertAdvance = FIXED_TO_INT( decoder.builder.advance.y ); } - glyph->root.format = FT_GLYPH_FORMAT_OUTLINE; + t1glyph->format = FT_GLYPH_FORMAT_OUTLINE; - if ( size && size->root.metrics.y_ppem < 24 ) - glyph->root.outline.flags |= FT_OUTLINE_HIGH_PRECISION; + if ( t1size && t1size->metrics.y_ppem < 24 ) + t1glyph->outline.flags |= FT_OUTLINE_HIGH_PRECISION; #if 1 /* apply the font matrix, if any */ if ( font_matrix.xx != 0x10000L || font_matrix.yy != font_matrix.xx || font_matrix.xy != 0 || font_matrix.yx != 0 ) - FT_Outline_Transform( &glyph->root.outline, &font_matrix ); + FT_Outline_Transform( &t1glyph->outline, &font_matrix ); if ( font_offset.x || font_offset.y ) - FT_Outline_Translate( &glyph->root.outline, + FT_Outline_Translate( &t1glyph->outline, font_offset.x, font_offset.y ); @@ -466,7 +468,7 @@ } /* compute the other metrics */ - FT_Outline_Get_CBox( &glyph->root.outline, &cbox ); + FT_Outline_Get_CBox( &t1glyph->outline, &cbox ); metrics->width = cbox.xMax - cbox.xMin; metrics->height = cbox.yMax - cbox.yMin; @@ -474,7 +476,7 @@ metrics->horiBearingX = cbox.xMin; metrics->horiBearingY = cbox.yMax; - if ( load_flags & FT_LOAD_VERTICAL_LAYOUT ) + if ( load_flags & FT_LOAD_VERTICAL_LAYOUT ) { /* make up vertical ones */ ft_synthesize_vertical_metrics( metrics, @@ -484,8 +486,8 @@ /* Set control data to the glyph charstrings. Note that this is */ /* _not_ zero-terminated. */ - glyph->root.control_data = (FT_Byte*)glyph_data.pointer; - glyph->root.control_len = glyph_data.length; + t1glyph->control_data = (FT_Byte*)glyph_data.pointer; + t1glyph->control_len = glyph_data.length; } @@ -500,8 +502,8 @@ /* Set the control data to null - it is no longer available if */ /* loaded incrementally. */ - glyph->root.control_data = 0; - glyph->root.control_len = 0; + t1glyph->control_data = 0; + t1glyph->control_len = 0; } #endif diff --git a/freetype/src/type1/t1gload.h b/freetype/src/type1/t1gload.h index 100df06e8..0bdea3a8d 100644 --- a/freetype/src/type1/t1gload.h +++ b/freetype/src/type1/t1gload.h @@ -4,7 +4,7 @@ /* */ /* Type 1 Glyph Loader (specification). */ /* */ -/* Copyright 1996-2001, 2002, 2003, 2008 by */ +/* Copyright 1996-2001, 2002, 2003, 2008, 2011 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -32,15 +32,15 @@ FT_BEGIN_HEADER FT_Pos* max_advance ); FT_LOCAL( FT_Error ) - T1_Get_Advances( T1_Face face, + T1_Get_Advances( FT_Face face, FT_UInt first, FT_UInt count, - FT_ULong load_flags, + FT_Int32 load_flags, FT_Fixed* advances ); FT_LOCAL( FT_Error ) - T1_Load_Glyph( T1_GlyphSlot glyph, - T1_Size size, + T1_Load_Glyph( FT_GlyphSlot glyph, + FT_Size size, FT_UInt glyph_index, FT_Int32 load_flags ); diff --git a/freetype/src/type1/t1load.c b/freetype/src/type1/t1load.c index 1451fe587..a0adfd490 100644 --- a/freetype/src/type1/t1load.c +++ b/freetype/src/type1/t1load.c @@ -4,7 +4,7 @@ /* */ /* Type 1 font loader (body). */ /* */ -/* Copyright 1996-2011 by */ +/* Copyright 1996-2012 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -1075,8 +1075,8 @@ /* and `/CharStrings' dictionaries. */ static void - parse_font_matrix( T1_Face face, - T1_Loader loader ) + t1_parse_font_matrix( T1_Face face, + T1_Loader loader ) { T1_Parser parser = &loader->parser; FT_Matrix* matrix = &face->type1.font_matrix; @@ -1099,7 +1099,7 @@ if ( temp_scale == 0 ) { - FT_ERROR(( "parse_font_matrix: invalid font matrix\n" )); + FT_ERROR(( "t1_parse_font_matrix: invalid font matrix\n" )); parser->root.error = T1_Err_Invalid_File_Format; return; } @@ -1388,7 +1388,8 @@ /* If the next token isn't `dup' we are done. */ - if ( ft_strncmp( (char*)parser->root.cursor, "dup", 3 ) != 0 ) + if ( parser->root.cursor + 4 < parser->root.limit && + ft_strncmp( (char*)parser->root.cursor, "dup", 3 ) != 0 ) break; T1_Skip_PS_Token( parser ); /* `dup' */ @@ -1407,7 +1408,8 @@ return; T1_Skip_Spaces ( parser ); - if ( ft_strncmp( (char*)parser->root.cursor, "put", 3 ) == 0 ) + if ( parser->root.cursor + 4 < parser->root.limit && + ft_strncmp( (char*)parser->root.cursor, "put", 3 ) == 0 ) { T1_Skip_PS_Token( parser ); /* skip `put' */ T1_Skip_Spaces ( parser ); @@ -1772,7 +1774,7 @@ #include "t1tokens.h" /* now add the special functions... */ - T1_FIELD_CALLBACK( "FontMatrix", parse_font_matrix, + T1_FIELD_CALLBACK( "FontMatrix", t1_parse_font_matrix, T1_FIELD_DICT_FONTDICT ) T1_FIELD_CALLBACK( "Encoding", parse_encoding, T1_FIELD_DICT_FONTDICT ) diff --git a/freetype/src/type1/t1objs.c b/freetype/src/type1/t1objs.c index 58632109c..b685f2f1b 100644 --- a/freetype/src/type1/t1objs.c +++ b/freetype/src/type1/t1objs.c @@ -4,7 +4,7 @@ /* */ /* Type 1 objects manager (body). */ /* */ -/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 by */ +/* Copyright 1996-2009, 2011 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -72,8 +72,11 @@ FT_LOCAL_DEF( void ) - T1_Size_Done( T1_Size size ) + T1_Size_Done( FT_Size t1size ) /* T1_Size */ { + T1_Size size = (T1_Size)t1size; + + if ( size->root.internal ) { PSH_Globals_Funcs funcs; @@ -89,8 +92,9 @@ FT_LOCAL_DEF( FT_Error ) - T1_Size_Init( T1_Size size ) + T1_Size_Init( FT_Size t1size ) /* T1_Size */ { + T1_Size size = (T1_Size)t1size; FT_Error error = T1_Err_Ok; PSH_Globals_Funcs funcs = T1_Size_Get_Globals_Funcs( size ); @@ -112,9 +116,10 @@ FT_LOCAL_DEF( FT_Error ) - T1_Size_Request( T1_Size size, + T1_Size_Request( FT_Size t1size, /* T1_Size */ FT_Size_Request req ) { + T1_Size size = (T1_Size)t1size; PSH_Globals_Funcs funcs = T1_Size_Get_Globals_Funcs( size ); @@ -137,20 +142,20 @@ /*************************************************************************/ FT_LOCAL_DEF( void ) - T1_GlyphSlot_Done( T1_GlyphSlot slot ) + T1_GlyphSlot_Done( FT_GlyphSlot slot ) { - slot->root.internal->glyph_hints = 0; + slot->internal->glyph_hints = 0; } FT_LOCAL_DEF( FT_Error ) - T1_GlyphSlot_Init( T1_GlyphSlot slot ) + T1_GlyphSlot_Init( FT_GlyphSlot slot ) { T1_Face face; PSHinter_Service pshinter; - face = (T1_Face)slot->root.face; + face = (T1_Face)slot->face; pshinter = (PSHinter_Service)face->pshinter; if ( pshinter ) @@ -158,15 +163,18 @@ FT_Module module; - module = FT_Get_Module( slot->root.face->driver->root.library, "pshinter" ); - if (module) + module = FT_Get_Module( slot->face->driver->root.library, + "pshinter" ); + if ( module ) { T1_Hints_Funcs funcs; + funcs = pshinter->get_t1_funcs( module ); - slot->root.internal->glyph_hints = (void*)funcs; + slot->internal->glyph_hints = (void*)funcs; } } + return 0; } @@ -190,8 +198,9 @@ /* face :: A typeless pointer to the face object to destroy. */ /* */ FT_LOCAL_DEF( void ) - T1_Face_Done( T1_Face face ) + T1_Face_Done( FT_Face t1face ) /* T1_Face */ { + T1_Face face = (T1_Face)t1face; FT_Memory memory; T1_Font type1; @@ -289,11 +298,12 @@ /* */ FT_LOCAL_DEF( FT_Error ) T1_Face_Init( FT_Stream stream, - T1_Face face, + FT_Face t1face, /* T1_Face */ FT_Int face_index, FT_Int num_params, FT_Parameter* params ) { + T1_Face face = (T1_Face)t1face; FT_Error error; FT_Service_PsCMaps psnames; PSAux_Service psaux; @@ -313,10 +323,18 @@ face->psaux = FT_Get_Module_Interface( FT_FACE_LIBRARY( face ), "psaux" ); psaux = (PSAux_Service)face->psaux; + if ( !psaux ) + { + FT_ERROR(( "T1_Face_Init: cannot access `psaux' module\n" )); + error = T1_Err_Missing_Module; + goto Exit; + } face->pshinter = FT_Get_Module_Interface( FT_FACE_LIBRARY( face ), "pshinter" ); + FT_TRACE2(( "Type 1 driver\n" )); + /* open the tokenizer; this will also check the font format */ error = T1_Open_Face( face ); if ( error ) @@ -447,7 +465,7 @@ root->bbox.xMax = ( type1->font_bbox.xMax + 0xFFFF ) >> 16; root->bbox.yMax = ( type1->font_bbox.yMax + 0xFFFF ) >> 16; - /* Set units_per_EM if we didn't set it in parse_font_matrix. */ + /* Set units_per_EM if we didn't set it in t1_parse_font_matrix. */ if ( !root->units_per_EM ) root->units_per_EM = 1000; @@ -484,7 +502,7 @@ FT_Face root = &face->root; - if ( psnames && psaux ) + if ( psnames ) { FT_CharMapRec charmap; T1_CMap_Classes cmap_classes = psaux->t1_cmap_classes; @@ -568,7 +586,7 @@ /* FreeType error code. 0 means success. */ /* */ FT_LOCAL_DEF( FT_Error ) - T1_Driver_Init( T1_Driver driver ) + T1_Driver_Init( FT_Module driver ) { FT_UNUSED( driver ); @@ -588,7 +606,7 @@ /* driver :: A handle to the target Type 1 driver. */ /* */ FT_LOCAL_DEF( void ) - T1_Driver_Done( T1_Driver driver ) + T1_Driver_Done( FT_Module driver ) { FT_UNUSED( driver ); } diff --git a/freetype/src/type1/t1objs.h b/freetype/src/type1/t1objs.h index e5e90293d..54ccbb996 100644 --- a/freetype/src/type1/t1objs.h +++ b/freetype/src/type1/t1objs.h @@ -4,7 +4,7 @@ /* */ /* Type 1 objects manager (specification). */ /* */ -/* Copyright 1996-2001, 2002, 2006 by */ +/* Copyright 1996-2001, 2002, 2006, 2011 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -34,17 +34,6 @@ FT_BEGIN_HEADER typedef struct T1_Glyph_Hints_ T1_Glyph_Hints; - /*************************************************************************/ - /* */ - /* */ - /* T1_Driver */ - /* */ - /* */ - /* A handle to a Type 1 driver object. */ - /* */ - typedef struct T1_DriverRec_ *T1_Driver; - - /*************************************************************************/ /* */ /* */ @@ -106,14 +95,14 @@ FT_BEGIN_HEADER FT_LOCAL( void ) - T1_Size_Done( T1_Size size ); + T1_Size_Done( FT_Size size ); FT_LOCAL( FT_Error ) - T1_Size_Request( T1_Size size, + T1_Size_Request( FT_Size size, FT_Size_Request req ); FT_LOCAL( FT_Error ) - T1_Size_Init( T1_Size size ); + T1_Size_Init( FT_Size size ); /*************************************************************************/ @@ -142,25 +131,25 @@ FT_BEGIN_HEADER FT_LOCAL( FT_Error ) T1_Face_Init( FT_Stream stream, - T1_Face face, + FT_Face face, FT_Int face_index, FT_Int num_params, FT_Parameter* params ); FT_LOCAL( void ) - T1_Face_Done( T1_Face face ); + T1_Face_Done( FT_Face face ); FT_LOCAL( FT_Error ) - T1_GlyphSlot_Init( T1_GlyphSlot slot ); + T1_GlyphSlot_Init( FT_GlyphSlot slot ); FT_LOCAL( void ) - T1_GlyphSlot_Done( T1_GlyphSlot slot ); + T1_GlyphSlot_Done( FT_GlyphSlot slot ); FT_LOCAL( FT_Error ) - T1_Driver_Init( T1_Driver driver ); + T1_Driver_Init( FT_Module driver ); FT_LOCAL( void ) - T1_Driver_Done( T1_Driver driver ); + T1_Driver_Done( FT_Module driver ); FT_END_HEADER diff --git a/freetype/src/type1/t1parse.c b/freetype/src/type1/t1parse.c index 2a762279f..495527962 100644 --- a/freetype/src/type1/t1parse.c +++ b/freetype/src/type1/t1parse.c @@ -4,7 +4,7 @@ /* */ /* Type 1 parser (body). */ /* */ -/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2008, 2009 by */ +/* Copyright 1996-2005, 2008, 2009, 2012 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -164,7 +164,7 @@ error = check_type1_format( stream, "%!FontType", 10 ); if ( error ) { - FT_TRACE2(( "[not a Type1 font]\n" )); + FT_TRACE2(( " not a Type 1 font\n" )); goto Exit; } } @@ -404,7 +404,7 @@ /* characters... So skip now all whitespace character codes. */ while ( cur < limit && ( *cur == ' ' || - *cur == '\t' || + *cur == '\t' || *cur == '\r' || *cur == '\n' ) ) ++cur; @@ -467,6 +467,14 @@ /* we now decrypt the encoded binary private dictionary */ psaux->t1_decrypt( parser->private_dict, parser->private_len, 55665U ); + if ( parser->private_len < 4 ) + { + FT_ERROR(( "T1_Get_Private_Dict:" + " invalid private dictionary section\n" )); + error = T1_Err_Invalid_File_Format; + goto Fail; + } + /* replace the four random bytes at the beginning with whitespace */ parser->private_dict[0] = ' '; parser->private_dict[1] = ' '; -- cgit v1.2.3