< prev index next >

src/java.desktop/share/native/libfreetype/src/type1/t1load.c

Print this page

        

*** 2,12 **** * * t1load.c * * Type 1 font loader (body). * ! * Copyright (C) 1996-2019 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, * modified, and distributed under the terms of the FreeType project * license, LICENSE.TXT. By continuing to use, modify, or distribute --- 2,12 ---- * * t1load.c * * Type 1 font loader (body). * ! * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, * modified, and distributed under the terms of the FreeType project * license, LICENSE.TXT. By continuing to use, modify, or distribute
*** 307,341 **** FT_Multi_Master mmaster; FT_Error error; FT_UInt i; FT_Fixed axiscoords[T1_MAX_MM_AXIS]; PS_Blend blend = face->blend; error = T1_Get_Multi_Master( face, &mmaster ); if ( error ) goto Exit; ! if ( FT_ALLOC( mmvar, ! sizeof ( FT_MM_Var ) + ! mmaster.num_axis * sizeof ( FT_Var_Axis ) ) ) goto Exit; mmvar->num_axis = mmaster.num_axis; mmvar->num_designs = mmaster.num_designs; mmvar->num_namedstyles = 0; /* Not supported */ ! mmvar->axis = (FT_Var_Axis*)&mmvar[1]; ! /* Point to axes after MM_Var struct */ mmvar->namedstyle = NULL; for ( i = 0; i < mmaster.num_axis; i++ ) { mmvar->axis[i].name = mmaster.axis[i].name; mmvar->axis[i].minimum = INT_TO_FIXED( mmaster.axis[i].minimum ); mmvar->axis[i].maximum = INT_TO_FIXED( mmaster.axis[i].maximum ); - mmvar->axis[i].def = ( mmvar->axis[i].minimum + - mmvar->axis[i].maximum ) / 2; - /* Does not apply. But this value is in range */ mmvar->axis[i].strid = ~0U; /* Does not apply */ mmvar->axis[i].tag = ~0U; /* Does not apply */ if ( !mmvar->axis[i].name ) continue; --- 307,365 ---- FT_Multi_Master mmaster; FT_Error error; FT_UInt i; FT_Fixed axiscoords[T1_MAX_MM_AXIS]; PS_Blend blend = face->blend; + FT_UShort* axis_flags; + + FT_Offset mmvar_size; + FT_Offset axis_flags_size; + FT_Offset axis_size; error = T1_Get_Multi_Master( face, &mmaster ); if ( error ) goto Exit; ! ! /* the various `*_size' variables, which we also use as */ ! /* offsets into the `mmvar' array, must be multiples of the */ ! /* pointer size (except the last one); without such an */ ! /* alignment there might be runtime errors due to */ ! /* misaligned addresses */ ! #undef ALIGN_SIZE ! #define ALIGN_SIZE( n ) \ ! ( ( (n) + sizeof (void*) - 1 ) & ~( sizeof (void*) - 1 ) ) ! ! mmvar_size = ALIGN_SIZE( sizeof ( FT_MM_Var ) ); ! axis_flags_size = ALIGN_SIZE( mmaster.num_axis * ! sizeof ( FT_UShort ) ); ! axis_size = mmaster.num_axis * sizeof ( FT_Var_Axis ); ! ! if ( FT_ALLOC( mmvar, mmvar_size + ! axis_flags_size + ! axis_size ) ) goto Exit; mmvar->num_axis = mmaster.num_axis; mmvar->num_designs = mmaster.num_designs; mmvar->num_namedstyles = 0; /* Not supported */ ! ! /* while axis flags are meaningless here, we have to provide the array */ ! /* to make `FT_Get_Var_Axis_Flags' work: the function expects that the */ ! /* values directly follow the data of `FT_MM_Var' */ ! axis_flags = (FT_UShort*)( (char*)mmvar + mmvar_size ); ! for ( i = 0; i < mmaster.num_axis; i++ ) ! axis_flags[i] = 0; ! ! mmvar->axis = (FT_Var_Axis*)( (char*)axis_flags + axis_flags_size ); mmvar->namedstyle = NULL; for ( i = 0; i < mmaster.num_axis; i++ ) { mmvar->axis[i].name = mmaster.axis[i].name; mmvar->axis[i].minimum = INT_TO_FIXED( mmaster.axis[i].minimum ); mmvar->axis[i].maximum = INT_TO_FIXED( mmaster.axis[i].maximum ); mmvar->axis[i].strid = ~0U; /* Does not apply */ mmvar->axis[i].tag = ~0U; /* Does not apply */ if ( !mmvar->axis[i].name ) continue;
< prev index next >