forked from minhngoc25a/freetype2
[woff2] Formatting.
* src/sfnt/sfobjs.c, src/sfnt/sfwoff2.c: Better formatting.
This commit is contained in:
parent
73dc5ef018
commit
3f35a033b6
|
@ -716,7 +716,7 @@
|
|||
face->root.face_index = face_instance_index;
|
||||
|
||||
/* `num_faces' for a WOFF2 needs to be handled separately. */
|
||||
if( woff2_num_faces )
|
||||
if ( woff2_num_faces )
|
||||
face->root.num_faces = woff2_num_faces;
|
||||
|
||||
return error;
|
||||
|
|
|
@ -135,26 +135,26 @@
|
|||
FT_Byte result_byte = 0;
|
||||
FT_UShort result_short = 0;
|
||||
|
||||
if( FT_READ_BYTE( code ) )
|
||||
if ( FT_READ_BYTE( code ) )
|
||||
return error;
|
||||
if( code == wordCode )
|
||||
if ( code == wordCode )
|
||||
{
|
||||
/* Read next two bytes and store FT_UShort value */
|
||||
if( FT_READ_USHORT( result_short ) )
|
||||
if ( FT_READ_USHORT( result_short ) )
|
||||
return error;
|
||||
*value = result_short;
|
||||
return FT_Err_Ok;
|
||||
}
|
||||
else if( code == oneMoreByteCode1 )
|
||||
else if ( code == oneMoreByteCode1 )
|
||||
{
|
||||
if( FT_READ_BYTE( result_byte ) )
|
||||
if ( FT_READ_BYTE( result_byte ) )
|
||||
return error;
|
||||
*value = result_byte + lowestUCode;
|
||||
return FT_Err_Ok;
|
||||
}
|
||||
else if( code == oneMoreByteCode2 )
|
||||
else if ( code == oneMoreByteCode2 )
|
||||
{
|
||||
if( FT_READ_BYTE( result_byte ) )
|
||||
if ( FT_READ_BYTE( result_byte ) )
|
||||
return error;
|
||||
*value = result_byte + lowestUCode * 2;
|
||||
return FT_Err_Ok;
|
||||
|
@ -178,7 +178,7 @@
|
|||
|
||||
for ( i = 0; i < 5; ++i ) {
|
||||
code = 0;
|
||||
if( FT_READ_BYTE( code ) )
|
||||
if ( FT_READ_BYTE( code ) )
|
||||
return error;
|
||||
|
||||
/* Leading zeros are invalid. */
|
||||
|
@ -216,11 +216,11 @@
|
|||
FT_Byte* dst = *dst_bytes;
|
||||
|
||||
/* Check if we are within limits. */
|
||||
if( ( *offset + size ) > WOFF2_DEFAULT_MAX_SIZE )
|
||||
if ( ( *offset + size ) > WOFF2_DEFAULT_MAX_SIZE )
|
||||
return FT_THROW( Array_Too_Large );
|
||||
|
||||
/* Reallocate `dst'. */
|
||||
if( ( *offset + size ) > *dst_size )
|
||||
if ( ( *offset + size ) > *dst_size )
|
||||
{
|
||||
/* DEBUG - Remove later */
|
||||
FT_TRACE2(( "Reallocating %lu to %lu.\n",
|
||||
|
@ -263,7 +263,7 @@
|
|||
pad_bytes = ROUND4( dest_offset ) - dest_offset;
|
||||
if ( pad_bytes > 0 )
|
||||
{
|
||||
if( WRITE_SFNT_BUF( &zeroes[0], pad_bytes ) )
|
||||
if ( WRITE_SFNT_BUF( &zeroes[0], pad_bytes ) )
|
||||
return FT_THROW( Invalid_Table );
|
||||
}
|
||||
|
||||
|
@ -282,17 +282,17 @@
|
|||
FT_ULong i;
|
||||
FT_ULong v;
|
||||
|
||||
for( i = 0; i < aligned_size; i += 4 )
|
||||
for ( i = 0; i < aligned_size; i += 4 )
|
||||
{
|
||||
checksum += ( buf[i] << 24 ) | ( buf[i+1] << 16 ) |
|
||||
( buf[i+2] << 8 ) | ( buf[i+3] << 0 );
|
||||
}
|
||||
|
||||
/* If size is not aligned to 4, treat as if it is padded with 0s. */
|
||||
if( size != aligned_size )
|
||||
if ( size != aligned_size )
|
||||
{
|
||||
v = 0;
|
||||
for( i = aligned_size ; i < size; ++i )
|
||||
for ( i = aligned_size ; i < size; ++i )
|
||||
v |= buf[i] << ( 24 - 8 * ( i & 3 ) );
|
||||
checksum += v;
|
||||
}
|
||||
|
@ -314,7 +314,7 @@
|
|||
result = BrotliDecoderDecompress(
|
||||
src_size, src, &uncompressed_size, dst);
|
||||
|
||||
if( result != BROTLI_DECODER_RESULT_SUCCESS ||
|
||||
if ( result != BROTLI_DECODER_RESULT_SUCCESS ||
|
||||
uncompressed_size != dst_size )
|
||||
{
|
||||
FT_ERROR(( "woff2_uncompress: Stream length mismatch.\n" ));
|
||||
|
@ -341,7 +341,7 @@
|
|||
|
||||
for ( i = 0; i < num_tables; i++ )
|
||||
{
|
||||
if( tables[i]->Tag == tag )
|
||||
if ( tables[i]->Tag == tag )
|
||||
return tables[i];
|
||||
}
|
||||
return NULL;
|
||||
|
@ -357,10 +357,10 @@
|
|||
FT_Error error = FT_Err_Ok;
|
||||
FT_UShort num_metrics;
|
||||
|
||||
if( FT_STREAM_SKIP( 34 ) )
|
||||
if ( FT_STREAM_SKIP( 34 ) )
|
||||
return FT_THROW( Invalid_Table );
|
||||
|
||||
if( FT_READ_USHORT( num_metrics ) )
|
||||
if ( FT_READ_USHORT( num_metrics ) )
|
||||
return FT_THROW( Invalid_Table );
|
||||
|
||||
*num_hmetrics = num_metrics;
|
||||
|
@ -386,7 +386,7 @@
|
|||
FT_Int b,
|
||||
FT_Int* result )
|
||||
{
|
||||
if( ( ( a > 0 ) && ( b > FT_INT_MAX - a ) ) ||
|
||||
if ( ( ( a > 0 ) && ( b > FT_INT_MAX - a ) ) ||
|
||||
( ( a < 0 ) && ( b < FT_INT_MIN - a ) ) )
|
||||
return FT_THROW( Invalid_Table );
|
||||
|
||||
|
@ -422,11 +422,11 @@
|
|||
FT_Byte flag = flags_in[i];
|
||||
FT_Bool on_curve = !( flag >> 7 );
|
||||
flag &= 0x7f;
|
||||
if( flag < 84 )
|
||||
if ( flag < 84 )
|
||||
data_bytes = 1;
|
||||
else if( flag < 120 )
|
||||
else if ( flag < 120 )
|
||||
data_bytes = 2;
|
||||
else if( flag < 124 )
|
||||
else if ( flag < 124 )
|
||||
data_bytes = 3;
|
||||
else
|
||||
data_bytes = 4;
|
||||
|
@ -685,7 +685,7 @@
|
|||
FT_Bool we_have_inst = FALSE;
|
||||
FT_UShort flags = FLAG_MORE_COMPONENTS;
|
||||
|
||||
if( FT_STREAM_SEEK( start_offset ) )
|
||||
if ( FT_STREAM_SEEK( start_offset ) )
|
||||
goto Exit;
|
||||
while ( flags & FLAG_MORE_COMPONENTS )
|
||||
{
|
||||
|
@ -708,7 +708,7 @@
|
|||
else if ( flags & FLAG_WE_HAVE_A_TWO_BY_TWO )
|
||||
arg_size += 8;
|
||||
|
||||
if( FT_STREAM_SKIP( arg_size ) )
|
||||
if ( FT_STREAM_SKIP( arg_size ) )
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
|
@ -742,18 +742,18 @@
|
|||
|
||||
const FT_ULong offset_size = index_format ? 4 : 2;
|
||||
|
||||
if( ( loca_values_size << 2 ) >> 2 != loca_values_size )
|
||||
if ( ( loca_values_size << 2 ) >> 2 != loca_values_size )
|
||||
goto Fail;
|
||||
|
||||
loca_buf_size = loca_values_size * offset_size;
|
||||
if( FT_NEW_ARRAY( loca_buf, loca_buf_size ) )
|
||||
if ( FT_NEW_ARRAY( loca_buf, loca_buf_size ) )
|
||||
goto Fail;
|
||||
|
||||
dst = loca_buf;
|
||||
for ( i = 0; i < loca_values_size; i++ )
|
||||
{
|
||||
FT_ULong value = loca_values[i];
|
||||
if( index_format )
|
||||
if ( index_format )
|
||||
WRITE_ULONG( dst, value );
|
||||
else
|
||||
WRITE_USHORT( dst, ( value >> 1 ) );
|
||||
|
@ -761,7 +761,7 @@
|
|||
|
||||
*checksum = compute_ULong_sum( loca_buf, loca_buf_size );
|
||||
/* Write loca table to sfnt buffer. */
|
||||
if( WRITE_SFNT_BUF( loca_buf, loca_buf_size ) )
|
||||
if ( WRITE_SFNT_BUF( loca_buf, loca_buf_size ) )
|
||||
goto Fail;
|
||||
|
||||
/* Set pointer `sfnt_bytes' to its correct value. */
|
||||
|
@ -772,7 +772,7 @@
|
|||
return error;
|
||||
|
||||
Fail:
|
||||
if( !error )
|
||||
if ( !error )
|
||||
error = FT_THROW( Invalid_Table );
|
||||
|
||||
FT_FREE( loca_buf );
|
||||
|
@ -821,14 +821,14 @@
|
|||
FT_Byte* glyph_buf = NULL;
|
||||
WOFF2_Point points = NULL;
|
||||
|
||||
if( FT_NEW_ARRAY( substreams, num_substreams ) )
|
||||
if ( FT_NEW_ARRAY( substreams, num_substreams ) )
|
||||
goto Fail;
|
||||
|
||||
if( FT_STREAM_SKIP( 4 ) )
|
||||
if ( FT_STREAM_SKIP( 4 ) )
|
||||
goto Fail;
|
||||
if( FT_READ_USHORT( num_glyphs ) )
|
||||
if ( FT_READ_USHORT( num_glyphs ) )
|
||||
goto Fail;
|
||||
if( FT_READ_USHORT( index_format ) )
|
||||
if ( FT_READ_USHORT( index_format ) )
|
||||
goto Fail;
|
||||
|
||||
FT_TRACE2(( "Num_glyphs = %u; index_format = %u\n",
|
||||
|
@ -842,19 +842,19 @@
|
|||
/* index_format = 1 => Long version `loca'. */
|
||||
expected_loca_length = ( index_format ? 4 : 2 ) *
|
||||
( (FT_ULong)num_glyphs + 1 );
|
||||
if( loca_table->dst_length != expected_loca_length )
|
||||
if ( loca_table->dst_length != expected_loca_length )
|
||||
goto Fail;
|
||||
|
||||
offset = ( 2 + num_substreams ) * 4;
|
||||
if( offset > glyf_table->TransformLength )
|
||||
if ( offset > glyf_table->TransformLength )
|
||||
goto Fail;
|
||||
|
||||
for ( i = 0; i < num_substreams; ++i )
|
||||
{
|
||||
FT_ULong substream_size;
|
||||
if( FT_READ_ULONG( substream_size ) )
|
||||
if ( FT_READ_ULONG( substream_size ) )
|
||||
goto Fail;
|
||||
if( substream_size > glyf_table->TransformLength - offset )
|
||||
if ( substream_size > glyf_table->TransformLength - offset )
|
||||
goto Fail;
|
||||
|
||||
substreams[i].start = pos + offset;
|
||||
|
@ -867,7 +867,7 @@
|
|||
offset += substream_size;
|
||||
}
|
||||
|
||||
if( FT_NEW_ARRAY( loca_values, num_glyphs + 1 ) )
|
||||
if ( FT_NEW_ARRAY( loca_values, num_glyphs + 1 ) )
|
||||
goto Fail;
|
||||
|
||||
points_size = 0;
|
||||
|
@ -878,10 +878,10 @@
|
|||
substreams[BBOX_STREAM].offset += bitmap_length;
|
||||
|
||||
glyph_buf_size = WOFF2_DEFAULT_GLYPH_BUF;
|
||||
if( FT_NEW_ARRAY( glyph_buf, glyph_buf_size ) )
|
||||
if ( FT_NEW_ARRAY( glyph_buf, glyph_buf_size ) )
|
||||
goto Fail;
|
||||
|
||||
if( FT_NEW_ARRAY( info->x_mins, num_glyphs ) )
|
||||
if ( FT_NEW_ARRAY( info->x_mins, num_glyphs ) )
|
||||
goto Fail;
|
||||
|
||||
for ( i = 0; i < num_glyphs; ++i )
|
||||
|
@ -895,19 +895,19 @@
|
|||
|
||||
/* Set `have_bbox'. */
|
||||
bbox_offset = bbox_bitmap_offset + ( i >> 3 );
|
||||
if( FT_STREAM_SEEK( bbox_offset ) ||
|
||||
if ( FT_STREAM_SEEK( bbox_offset ) ||
|
||||
FT_READ_BYTE( bbox_bitmap ) )
|
||||
goto Fail;
|
||||
if( bbox_bitmap & ( 0x80 >> ( i & 7 ) ) )
|
||||
if ( bbox_bitmap & ( 0x80 >> ( i & 7 ) ) )
|
||||
have_bbox = TRUE;
|
||||
|
||||
/* Read value from `nContourStream' */
|
||||
if( FT_STREAM_SEEK( substreams[N_CONTOUR_STREAM].offset ) ||
|
||||
if ( FT_STREAM_SEEK( substreams[N_CONTOUR_STREAM].offset ) ||
|
||||
FT_READ_USHORT( n_contours ) )
|
||||
goto Fail;
|
||||
substreams[N_CONTOUR_STREAM].offset += 2;
|
||||
|
||||
if( n_contours == 0xffff )
|
||||
if ( n_contours == 0xffff )
|
||||
{
|
||||
/* Composite glyph */
|
||||
FT_Bool have_instructions = FALSE;
|
||||
|
@ -917,27 +917,27 @@
|
|||
FT_Byte* pointer = NULL;
|
||||
|
||||
/* Composite glyphs must have explicit bbox. */
|
||||
if( !have_bbox )
|
||||
if ( !have_bbox )
|
||||
goto Fail;
|
||||
|
||||
if( compositeGlyph_size( stream,
|
||||
if ( compositeGlyph_size( stream,
|
||||
substreams[COMPOSITE_STREAM].offset,
|
||||
&composite_size,
|
||||
&have_instructions) )
|
||||
goto Fail;
|
||||
|
||||
if( have_instructions )
|
||||
if ( have_instructions )
|
||||
{
|
||||
if( FT_STREAM_SEEK( substreams[GLYPH_STREAM].offset ) ||
|
||||
if ( FT_STREAM_SEEK( substreams[GLYPH_STREAM].offset ) ||
|
||||
READ_255USHORT( instruction_size ) )
|
||||
goto Fail;
|
||||
substreams[GLYPH_STREAM].offset = FT_STREAM_POS();
|
||||
}
|
||||
|
||||
size_needed = 12 + composite_size + instruction_size;
|
||||
if( glyph_buf_size < size_needed )
|
||||
if ( glyph_buf_size < size_needed )
|
||||
{
|
||||
if( FT_RENEW_ARRAY( glyph_buf, glyph_buf_size, size_needed ) )
|
||||
if ( FT_RENEW_ARRAY( glyph_buf, glyph_buf_size, size_needed ) )
|
||||
goto Fail;
|
||||
glyph_buf_size = size_needed;
|
||||
}
|
||||
|
@ -947,36 +947,36 @@
|
|||
glyph_size += 2;
|
||||
|
||||
/* Read x_min for current glyph. */
|
||||
if( FT_STREAM_SEEK( substreams[BBOX_STREAM].offset ) ||
|
||||
if ( FT_STREAM_SEEK( substreams[BBOX_STREAM].offset ) ||
|
||||
FT_READ_USHORT( x_min ) )
|
||||
goto Fail;
|
||||
/* No increment here because we read again. */
|
||||
|
||||
if( FT_STREAM_SEEK( substreams[BBOX_STREAM].offset ) ||
|
||||
if ( FT_STREAM_SEEK( substreams[BBOX_STREAM].offset ) ||
|
||||
FT_STREAM_READ( glyph_buf + glyph_size, 8 ) )
|
||||
goto Fail;
|
||||
substreams[BBOX_STREAM].offset += 8;
|
||||
glyph_size += 8;
|
||||
|
||||
if( FT_STREAM_SEEK( substreams[COMPOSITE_STREAM].offset ) ||
|
||||
if ( FT_STREAM_SEEK( substreams[COMPOSITE_STREAM].offset ) ||
|
||||
FT_STREAM_READ( glyph_buf + glyph_size, composite_size ) )
|
||||
goto Fail;
|
||||
substreams[COMPOSITE_STREAM].offset += composite_size;
|
||||
glyph_size += composite_size;
|
||||
|
||||
if( have_instructions )
|
||||
if ( have_instructions )
|
||||
{
|
||||
pointer = glyph_buf + glyph_size;
|
||||
WRITE_USHORT( pointer, instruction_size );
|
||||
glyph_size += 2;
|
||||
if( FT_STREAM_SEEK( substreams[INSTRUCTION_STREAM].offset ) ||
|
||||
if ( FT_STREAM_SEEK( substreams[INSTRUCTION_STREAM].offset ) ||
|
||||
FT_STREAM_READ( glyph_buf + glyph_size, instruction_size ) )
|
||||
goto Fail;
|
||||
substreams[INSTRUCTION_STREAM].offset += instruction_size;
|
||||
glyph_size += instruction_size;
|
||||
}
|
||||
}
|
||||
else if( n_contours > 0 )
|
||||
else if ( n_contours > 0 )
|
||||
{
|
||||
/* Simple glyph */
|
||||
FT_ULong total_n_points = 0;
|
||||
|
@ -994,25 +994,25 @@
|
|||
|
||||
FT_Byte* pointer = NULL;
|
||||
|
||||
if( FT_NEW_ARRAY( n_points_arr, n_contours ) )
|
||||
if ( FT_NEW_ARRAY( n_points_arr, n_contours ) )
|
||||
goto Fail;
|
||||
|
||||
if( FT_STREAM_SEEK( substreams[N_POINTS_STREAM].offset ) )
|
||||
if ( FT_STREAM_SEEK( substreams[N_POINTS_STREAM].offset ) )
|
||||
goto Fail;
|
||||
for( j = 0; j < n_contours; ++j )
|
||||
for ( j = 0; j < n_contours; ++j )
|
||||
{
|
||||
if( READ_255USHORT( n_points_contour ) )
|
||||
if ( READ_255USHORT( n_points_contour ) )
|
||||
goto Fail;
|
||||
n_points_arr[j] = n_points_contour;
|
||||
/* Prevent negative/overflow. */
|
||||
if( total_n_points + n_points_contour < total_n_points )
|
||||
if ( total_n_points + n_points_contour < total_n_points )
|
||||
goto Fail;
|
||||
total_n_points += n_points_contour;
|
||||
}
|
||||
substreams[N_POINTS_STREAM].offset = FT_STREAM_POS();
|
||||
|
||||
flag_size = total_n_points;
|
||||
if( flag_size > substreams[FLAG_STREAM].size )
|
||||
if ( flag_size > substreams[FLAG_STREAM].size )
|
||||
goto Fail;
|
||||
|
||||
flags_buf = stream->base + substreams[FLAG_STREAM].offset;
|
||||
|
@ -1024,29 +1024,29 @@
|
|||
triplet_bytes_used = 0;
|
||||
/* Create array to store point information. */
|
||||
points_size = total_n_points;
|
||||
if( FT_NEW_ARRAY( points, points_size ) )
|
||||
if ( FT_NEW_ARRAY( points, points_size ) )
|
||||
goto Fail;
|
||||
|
||||
if( triplet_decode( flags_buf, triplet_buf,
|
||||
if ( triplet_decode( flags_buf, triplet_buf,
|
||||
triplet_size, total_n_points,
|
||||
points, &triplet_bytes_used ) )
|
||||
goto Fail;
|
||||
substreams[FLAG_STREAM].offset += flag_size;
|
||||
substreams[GLYPH_STREAM].offset += triplet_bytes_used;
|
||||
|
||||
if( FT_STREAM_SEEK( substreams[GLYPH_STREAM].offset ) ||
|
||||
if ( FT_STREAM_SEEK( substreams[GLYPH_STREAM].offset ) ||
|
||||
READ_255USHORT( instruction_size ) )
|
||||
goto Fail;
|
||||
substreams[GLYPH_STREAM].offset = FT_STREAM_POS();
|
||||
|
||||
if( total_n_points >= ( 1 << 27 ) ||
|
||||
if ( total_n_points >= ( 1 << 27 ) ||
|
||||
instruction_size >= ( 1 << 30 ) )
|
||||
goto Fail;
|
||||
size_needed = 12 + ( 2 * n_contours ) + ( 5 * total_n_points )
|
||||
+ instruction_size;
|
||||
if( glyph_buf_size < size_needed )
|
||||
if ( glyph_buf_size < size_needed )
|
||||
{
|
||||
if( FT_RENEW_ARRAY( glyph_buf, glyph_buf_size, size_needed ) )
|
||||
if ( FT_RENEW_ARRAY( glyph_buf, glyph_buf_size, size_needed ) )
|
||||
goto Fail;
|
||||
glyph_buf_size = size_needed;
|
||||
}
|
||||
|
@ -1055,15 +1055,15 @@
|
|||
WRITE_USHORT( pointer, n_contours );
|
||||
glyph_size += 2;
|
||||
|
||||
if( have_bbox )
|
||||
if ( have_bbox )
|
||||
{
|
||||
/* Read x_min for current glyph. */
|
||||
if( FT_STREAM_SEEK( substreams[BBOX_STREAM].offset ) ||
|
||||
if ( FT_STREAM_SEEK( substreams[BBOX_STREAM].offset ) ||
|
||||
FT_READ_USHORT( x_min ) )
|
||||
goto Fail;
|
||||
/* No increment here because we read again. */
|
||||
|
||||
if( FT_STREAM_SEEK( substreams[BBOX_STREAM].offset ) ||
|
||||
if ( FT_STREAM_SEEK( substreams[BBOX_STREAM].offset ) ||
|
||||
FT_STREAM_READ( glyph_buf + glyph_size, 8 ) )
|
||||
goto Fail;
|
||||
substreams[BBOX_STREAM].offset += 8;
|
||||
|
@ -1074,10 +1074,10 @@
|
|||
glyph_size = CONTOUR_OFFSET_END_POINT;
|
||||
pointer = glyph_buf + glyph_size;
|
||||
end_point = -1;
|
||||
for( contour_ix = 0; contour_ix < n_contours; ++contour_ix )
|
||||
for ( contour_ix = 0; contour_ix < n_contours; ++contour_ix )
|
||||
{
|
||||
end_point += n_points_arr[contour_ix];
|
||||
if( end_point >= 65536 )
|
||||
if ( end_point >= 65536 )
|
||||
goto Fail;
|
||||
|
||||
WRITE_SHORT( pointer, end_point );
|
||||
|
@ -1086,13 +1086,13 @@
|
|||
|
||||
WRITE_USHORT( pointer, instruction_size );
|
||||
glyph_size += 2;
|
||||
if( FT_STREAM_SEEK( substreams[INSTRUCTION_STREAM].offset ) ||
|
||||
if ( FT_STREAM_SEEK( substreams[INSTRUCTION_STREAM].offset ) ||
|
||||
FT_STREAM_READ( glyph_buf + glyph_size, instruction_size ) )
|
||||
goto Fail;
|
||||
substreams[INSTRUCTION_STREAM].offset += instruction_size;
|
||||
glyph_size += instruction_size;
|
||||
|
||||
if( store_points( total_n_points, points, n_contours,
|
||||
if ( store_points( total_n_points, points, n_contours,
|
||||
instruction_size, glyph_buf,
|
||||
glyph_buf_size, &glyph_size ) )
|
||||
goto Fail;
|
||||
|
@ -1104,17 +1104,17 @@
|
|||
{
|
||||
/* Empty glyph. */
|
||||
/* Must not have a bbox. */
|
||||
if( have_bbox )
|
||||
if ( have_bbox )
|
||||
{
|
||||
FT_ERROR(( "Empty glyph has a bbox.\n" ));
|
||||
goto Fail;
|
||||
}
|
||||
}
|
||||
loca_values[i] = dest_offset - glyf_start;
|
||||
if( WRITE_SFNT_BUF( glyph_buf, glyph_size ) )
|
||||
if ( WRITE_SFNT_BUF( glyph_buf, glyph_size ) )
|
||||
goto Fail;
|
||||
|
||||
if( pad4( &sfnt, sfnt_size, &dest_offset, memory ) )
|
||||
if ( pad4( &sfnt, sfnt_size, &dest_offset, memory ) )
|
||||
goto Fail;
|
||||
|
||||
*glyf_checksum += compute_ULong_sum( glyph_buf, glyph_size );
|
||||
|
@ -1129,7 +1129,7 @@
|
|||
/* loca[n] will be equal the length of the `glyf' table. */
|
||||
loca_values[num_glyphs] = glyf_table->dst_length;
|
||||
|
||||
if( store_loca( loca_values, num_glyphs + 1, index_format,
|
||||
if ( store_loca( loca_values, num_glyphs + 1, index_format,
|
||||
loca_checksum, &sfnt, sfnt_size,
|
||||
&dest_offset, memory ) )
|
||||
goto Fail;
|
||||
|
@ -1145,7 +1145,7 @@
|
|||
*sfnt_bytes = sfnt;
|
||||
*out_offset = dest_offset;
|
||||
/* DEBUG - Remove later */
|
||||
if( !error )
|
||||
if ( !error )
|
||||
FT_TRACE2(( "reconstruct_glyf proceeding w/o errors.\n" ));
|
||||
|
||||
FT_FREE( substreams );
|
||||
|
@ -1157,7 +1157,7 @@
|
|||
return error;
|
||||
|
||||
Fail:
|
||||
if( !error )
|
||||
if ( !error )
|
||||
error = FT_THROW( Invalid_Table );
|
||||
|
||||
FT_FREE( substreams );
|
||||
|
@ -1200,7 +1200,7 @@
|
|||
if ( FT_STREAM_SEEK( maxp_table->src_offset ) && FT_STREAM_SKIP( 8 ) )
|
||||
return error;
|
||||
|
||||
if( FT_READ_USHORT( num_glyphs ) )
|
||||
if ( FT_READ_USHORT( num_glyphs ) )
|
||||
return error;
|
||||
|
||||
info->num_glyphs = num_glyphs;
|
||||
|
@ -1208,35 +1208,35 @@
|
|||
FT_TRACE2(( "num_glyphs = %d", num_glyphs ));
|
||||
|
||||
/* Read `indexToLocFormat' from head table. */
|
||||
if( FT_STREAM_SEEK( head_table->src_offset ) && FT_STREAM_SKIP( 50 ) )
|
||||
if ( FT_STREAM_SEEK( head_table->src_offset ) && FT_STREAM_SKIP( 50 ) )
|
||||
return error;
|
||||
|
||||
if( FT_READ_USHORT( index_format ) )
|
||||
if ( FT_READ_USHORT( index_format ) )
|
||||
return error;
|
||||
|
||||
offset_size = index_format ? 4 : 2;
|
||||
|
||||
/* Create x_mins array. */
|
||||
if( FT_NEW_ARRAY( info->x_mins, num_glyphs ) )
|
||||
if ( FT_NEW_ARRAY( info->x_mins, num_glyphs ) )
|
||||
return error;
|
||||
|
||||
loca_offset = loca_table->src_offset;
|
||||
|
||||
for( i = 0; i < num_glyphs; ++i )
|
||||
for ( i = 0; i < num_glyphs; ++i )
|
||||
{
|
||||
if( FT_STREAM_SEEK( loca_offset ) )
|
||||
if ( FT_STREAM_SEEK( loca_offset ) )
|
||||
return error;
|
||||
|
||||
loca_offset += offset_size;
|
||||
|
||||
if( index_format )
|
||||
if ( index_format )
|
||||
{
|
||||
if( FT_READ_ULONG( glyf_offset ) )
|
||||
if ( FT_READ_ULONG( glyf_offset ) )
|
||||
return error;
|
||||
}
|
||||
else
|
||||
{
|
||||
if( FT_READ_USHORT( glyf_offset_short ) )
|
||||
if ( FT_READ_USHORT( glyf_offset_short ) )
|
||||
return error;
|
||||
|
||||
glyf_offset = (FT_ULong)( glyf_offset_short );
|
||||
|
@ -1245,10 +1245,10 @@
|
|||
|
||||
glyf_offset += glyf_table->src_offset;
|
||||
|
||||
if( FT_STREAM_SEEK( glyf_offset ) && FT_STREAM_SKIP( 2 ) )
|
||||
if ( FT_STREAM_SEEK( glyf_offset ) && FT_STREAM_SKIP( 2 ) )
|
||||
return error;
|
||||
|
||||
if( FT_READ_USHORT( info->x_mins[i] ) )
|
||||
if ( FT_READ_USHORT( info->x_mins[i] ) )
|
||||
return error;
|
||||
}
|
||||
|
||||
|
@ -1284,7 +1284,7 @@
|
|||
|
||||
FT_TRACE2(( "Reconstructing hmtx.\n" ));
|
||||
|
||||
if( FT_READ_BYTE( hmtx_flags ) )
|
||||
if ( FT_READ_BYTE( hmtx_flags ) )
|
||||
goto Fail;
|
||||
|
||||
has_proportional_lsbs = ( hmtx_flags & 1 ) == 0;
|
||||
|
@ -1356,14 +1356,14 @@
|
|||
|
||||
/* Build the hmtx table. */
|
||||
hmtx_table_size = 2 * num_hmetrics + 2 * num_glyphs;
|
||||
if( FT_NEW_ARRAY( hmtx_table, hmtx_table_size ) )
|
||||
if ( FT_NEW_ARRAY( hmtx_table, hmtx_table_size ) )
|
||||
goto Fail;
|
||||
|
||||
dst = hmtx_table;
|
||||
FT_TRACE2(( "hmtx values: \n" ));
|
||||
for( i = 0; i < num_glyphs; i++ )
|
||||
for ( i = 0; i < num_glyphs; i++ )
|
||||
{
|
||||
if( i < num_hmetrics )
|
||||
if ( i < num_hmetrics )
|
||||
{
|
||||
WRITE_SHORT( dst, advance_widths[i] );
|
||||
FT_TRACE2(( "%d ", advance_widths[i] ));
|
||||
|
@ -1376,7 +1376,7 @@
|
|||
FT_TRACE2(( "\n" ));
|
||||
*checksum = compute_ULong_sum( hmtx_table, hmtx_table_size );
|
||||
/* Write hmtx table to sfnt buffer. */
|
||||
if( WRITE_SFNT_BUF( hmtx_table, hmtx_table_size ) )
|
||||
if ( WRITE_SFNT_BUF( hmtx_table, hmtx_table_size ) )
|
||||
goto Fail;
|
||||
|
||||
/* Set pointer `sfnt_bytes' to its correct value. */
|
||||
|
@ -1386,7 +1386,7 @@
|
|||
return error;
|
||||
|
||||
Fail:
|
||||
if( !error )
|
||||
if ( !error )
|
||||
error = FT_THROW( Invalid_Table );
|
||||
return error;
|
||||
}
|
||||
|
@ -1430,7 +1430,7 @@
|
|||
const WOFF2_Table loca_table = find_table( indices, num_tables,
|
||||
TTAG_loca );
|
||||
|
||||
if( ( !glyf_table && loca_table ) ||
|
||||
if ( ( !glyf_table && loca_table ) ||
|
||||
( !loca_table && glyf_table ) )
|
||||
{
|
||||
FT_ERROR(( "Cannot have only one of glyf/loca.\n" ));
|
||||
|
@ -1438,9 +1438,9 @@
|
|||
}
|
||||
|
||||
/* Both `glyf' and `loca' must have same transformation. */
|
||||
if( glyf_table != NULL )
|
||||
if ( glyf_table != NULL )
|
||||
{
|
||||
if( ( glyf_table->flags & WOFF2_FLAGS_TRANSFORM ) !=
|
||||
if ( ( glyf_table->flags & WOFF2_FLAGS_TRANSFORM ) !=
|
||||
( loca_table->flags & WOFF2_FLAGS_TRANSFORM ) )
|
||||
{
|
||||
FT_ERROR(( "Transformation mismatch in glyf and loca." ));
|
||||
|
@ -1478,25 +1478,25 @@
|
|||
if ( FT_STREAM_SEEK( table.src_offset ) )
|
||||
return FT_THROW( Invalid_Table );
|
||||
|
||||
if( table.src_offset + table.src_length > transformed_buf_size )
|
||||
if ( table.src_offset + table.src_length > transformed_buf_size )
|
||||
return FT_THROW( Invalid_Table );
|
||||
|
||||
/* Get stream size for fields of `hmtx' table. */
|
||||
if( table.Tag == TTAG_hhea )
|
||||
if ( table.Tag == TTAG_hhea )
|
||||
{
|
||||
if( read_num_hmetrics( stream, table.src_length, &num_hmetrics ) )
|
||||
if ( read_num_hmetrics( stream, table.src_length, &num_hmetrics ) )
|
||||
return FT_THROW( Invalid_Table );
|
||||
}
|
||||
|
||||
info->num_hmetrics = num_hmetrics;
|
||||
|
||||
checksum = 0;
|
||||
if( ( table.flags & WOFF2_FLAGS_TRANSFORM ) != WOFF2_FLAGS_TRANSFORM )
|
||||
if ( ( table.flags & WOFF2_FLAGS_TRANSFORM ) != WOFF2_FLAGS_TRANSFORM )
|
||||
{
|
||||
/* Check if `head' is atleast 12 bytes. */
|
||||
if( table.Tag == TTAG_head )
|
||||
if ( table.Tag == TTAG_head )
|
||||
{
|
||||
if( table.src_length < 12 )
|
||||
if ( table.src_length < 12 )
|
||||
return FT_THROW( Invalid_Table );
|
||||
|
||||
buf_cursor = transformed_buf + table.src_offset + 8;
|
||||
|
@ -1509,7 +1509,7 @@
|
|||
/* DEBUG - Remove later */
|
||||
FT_TRACE2(( "Checksum = %08x\n", checksum ));
|
||||
|
||||
if( WRITE_SFNT_BUF( transformed_buf + table.src_offset,
|
||||
if ( WRITE_SFNT_BUF( transformed_buf + table.src_offset,
|
||||
table.src_length ) )
|
||||
return FT_THROW( Invalid_Table );
|
||||
}
|
||||
|
@ -1517,34 +1517,36 @@
|
|||
/* DEBUG - Remove later */
|
||||
FT_TRACE2(( "This table has xform.\n" ));
|
||||
|
||||
if( table.Tag == TTAG_glyf )
|
||||
if ( table.Tag == TTAG_glyf )
|
||||
{
|
||||
is_glyf_xform = TRUE;
|
||||
table.dst_offset = dest_offset;
|
||||
|
||||
if( reconstruct_glyf( stream, &table, &checksum,
|
||||
if ( reconstruct_glyf( stream, &table, &checksum,
|
||||
loca_table, &loca_checksum,
|
||||
&sfnt, sfnt_size, &dest_offset,
|
||||
info, memory ) )
|
||||
return FT_THROW( Invalid_Table );
|
||||
FT_TRACE2(("glyf checksum is %08x\n", checksum));
|
||||
}
|
||||
else if( table.Tag == TTAG_loca )
|
||||
else if ( table.Tag == TTAG_loca )
|
||||
{
|
||||
checksum = loca_checksum;
|
||||
}
|
||||
else if( table.Tag == TTAG_hmtx )
|
||||
else if ( table.Tag == TTAG_hmtx )
|
||||
{
|
||||
/* If glyf is not transformed and hmtx is, handle separately. */
|
||||
if( !is_glyf_xform )
|
||||
if ( !is_glyf_xform )
|
||||
{
|
||||
if( get_x_mins(stream, indices, num_tables, info, memory) )
|
||||
if ( get_x_mins(stream, indices, num_tables, info, memory) )
|
||||
return FT_THROW( Invalid_Table );
|
||||
}
|
||||
table.dst_offset = dest_offset;
|
||||
if( reconstruct_hmtx( stream, table.src_length, info->num_glyphs,
|
||||
info->num_hmetrics, info->x_mins, &checksum,
|
||||
&sfnt, sfnt_size, &dest_offset, memory ) )
|
||||
if ( reconstruct_hmtx( stream, table.src_length,
|
||||
info->num_glyphs, info->num_hmetrics,
|
||||
info->x_mins, &checksum,
|
||||
&sfnt, sfnt_size,
|
||||
&dest_offset, memory ) )
|
||||
return FT_THROW( Invalid_Table );
|
||||
}
|
||||
else
|
||||
|
@ -1567,7 +1569,7 @@
|
|||
/* Update checksum. */
|
||||
font_checksum += compute_ULong_sum( table_entry, 16 );
|
||||
|
||||
if( pad4( &sfnt, sfnt_size, &dest_offset, memory ) )
|
||||
if ( pad4( &sfnt, sfnt_size, &dest_offset, memory ) )
|
||||
goto Fail;
|
||||
|
||||
/* Sanity check. */
|
||||
|
@ -1603,7 +1605,7 @@
|
|||
return error;
|
||||
|
||||
Fail:
|
||||
if( !error )
|
||||
if ( !error )
|
||||
error = FT_THROW( Invalid_Table );
|
||||
|
||||
FT_FREE( table_entry );
|
||||
|
@ -1736,12 +1738,12 @@
|
|||
for ( nn = 0; nn < woff2.num_tables; nn++ )
|
||||
{
|
||||
WOFF2_Table table = tables + nn;
|
||||
if( FT_READ_BYTE( table->FlagByte ) )
|
||||
if ( FT_READ_BYTE( table->FlagByte ) )
|
||||
goto Exit;
|
||||
|
||||
if ( ( table->FlagByte & 0x3f ) == 0x3f )
|
||||
{
|
||||
if( FT_READ_ULONG( table->Tag ) )
|
||||
if ( FT_READ_ULONG( table->Tag ) )
|
||||
goto Exit;
|
||||
}
|
||||
else
|
||||
|
@ -1761,16 +1763,16 @@
|
|||
|
||||
flags |= xform_version;
|
||||
|
||||
if( READ_BASE128( table->dst_length ) )
|
||||
if ( READ_BASE128( table->dst_length ) )
|
||||
goto Exit;
|
||||
|
||||
table->TransformLength = table->dst_length;
|
||||
|
||||
if ( ( flags & WOFF2_FLAGS_TRANSFORM ) != 0 )
|
||||
{
|
||||
if( READ_BASE128( table->TransformLength ) )
|
||||
if ( READ_BASE128( table->TransformLength ) )
|
||||
goto Exit;
|
||||
if( table->Tag == TTAG_loca && table->TransformLength )
|
||||
if ( table->Tag == TTAG_loca && table->TransformLength )
|
||||
{
|
||||
FT_ERROR(( "woff_font_open: Invalid loca `transformLength'.\n" ));
|
||||
error = FT_THROW( Invalid_Table );
|
||||
|
@ -1809,7 +1811,7 @@
|
|||
last_table = indices[woff2.num_tables - 1];
|
||||
woff2.uncompressed_size = last_table->src_offset
|
||||
+ last_table->src_length;
|
||||
if( woff2.uncompressed_size < last_table->src_offset )
|
||||
if ( woff2.uncompressed_size < last_table->src_offset )
|
||||
{
|
||||
error = FT_THROW( Invalid_Table );
|
||||
goto Exit;
|
||||
|
@ -1823,37 +1825,37 @@
|
|||
/* Check for and read collection directory. */
|
||||
woff2.num_fonts = 1;
|
||||
woff2.header_version = 0;
|
||||
if( woff2.flavor == TTAG_ttcf ){
|
||||
if ( woff2.flavor == TTAG_ttcf ){
|
||||
FT_TRACE2(( "Font is a TTC, reading collection directory.\n" ));
|
||||
if( FT_READ_ULONG( woff2.header_version ) )
|
||||
if ( FT_READ_ULONG( woff2.header_version ) )
|
||||
goto Exit;
|
||||
/* DEBUG - Remove later */
|
||||
FT_TRACE2(( "Header version: %lx\n", woff2.header_version ));
|
||||
if( woff2.header_version != 0x00010000 &&
|
||||
if ( woff2.header_version != 0x00010000 &&
|
||||
woff2.header_version != 0x00020000 )
|
||||
{
|
||||
error = FT_THROW( Invalid_Table );
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
if( READ_255USHORT( woff2.num_fonts ) )
|
||||
if ( READ_255USHORT( woff2.num_fonts ) )
|
||||
goto Exit;
|
||||
/* DEBUG - Remove later */
|
||||
FT_TRACE2(( "Number of fonts in TTC: %ld\n", woff2.num_fonts ));
|
||||
|
||||
if( FT_NEW_ARRAY( woff2.ttc_fonts, woff2.num_fonts ) )
|
||||
if ( FT_NEW_ARRAY( woff2.ttc_fonts, woff2.num_fonts ) )
|
||||
goto Exit;
|
||||
|
||||
for ( nn = 0; nn < woff2.num_fonts; nn++ )
|
||||
{
|
||||
WOFF2_TtcFont ttc_font = woff2.ttc_fonts + nn;
|
||||
|
||||
if( READ_255USHORT( ttc_font->num_tables ) )
|
||||
if ( READ_255USHORT( ttc_font->num_tables ) )
|
||||
goto Exit;
|
||||
if( FT_READ_ULONG( ttc_font->flavor ) )
|
||||
if ( FT_READ_ULONG( ttc_font->flavor ) )
|
||||
goto Exit;
|
||||
|
||||
if( FT_NEW_ARRAY( ttc_font->table_indices, ttc_font->num_tables ) )
|
||||
if ( FT_NEW_ARRAY( ttc_font->table_indices, ttc_font->num_tables ) )
|
||||
goto Exit;
|
||||
/* DEBUG - Change to TRACE4 */
|
||||
FT_TRACE2(( "Number of tables in font %d: %ld\n",
|
||||
|
@ -1869,25 +1871,25 @@
|
|||
FT_UShort table_index;
|
||||
WOFF2_Table table;
|
||||
|
||||
if( READ_255USHORT( table_index ) )
|
||||
if ( READ_255USHORT( table_index ) )
|
||||
goto Exit;
|
||||
/* DEBUG - Change to TRACE5 */
|
||||
FT_TRACE2(("%hu ", table_index));
|
||||
ttc_font->table_indices[j] = table_index;
|
||||
|
||||
table = indices[table_index];
|
||||
if( table->Tag == TTAG_loca )
|
||||
if ( table->Tag == TTAG_loca )
|
||||
loca_index = table_index;
|
||||
if( table->Tag == TTAG_glyf )
|
||||
if ( table->Tag == TTAG_glyf )
|
||||
glyf_index = table_index;
|
||||
}
|
||||
/* DEBUG - Change to TRACE5 */
|
||||
FT_TRACE2(( "\n" ));
|
||||
|
||||
/* glyf and loca must be consecutive */
|
||||
if( glyf_index > 0 || loca_index > 0 )
|
||||
if ( glyf_index > 0 || loca_index > 0 )
|
||||
{
|
||||
if( glyf_index > loca_index ||
|
||||
if ( glyf_index > loca_index ||
|
||||
loca_index - glyf_index != 1 )
|
||||
{
|
||||
error = FT_THROW( Invalid_Table );
|
||||
|
@ -1904,7 +1906,7 @@
|
|||
woff2.totalCompressedSize );
|
||||
|
||||
/* Few more checks before we start reading the tables. */
|
||||
if( file_offset > woff2.length )
|
||||
if ( file_offset > woff2.length )
|
||||
{
|
||||
error = FT_THROW( Invalid_Table );
|
||||
goto Exit;
|
||||
|
@ -1920,9 +1922,9 @@
|
|||
file_offset = ROUND4(woff2.metaOffset + woff2.metaLength);
|
||||
}
|
||||
|
||||
if( woff2.privOffset )
|
||||
if ( woff2.privOffset )
|
||||
{
|
||||
if( file_offset != woff2.privOffset )
|
||||
if ( file_offset != woff2.privOffset )
|
||||
{
|
||||
error = FT_THROW( Invalid_Table );
|
||||
goto Exit;
|
||||
|
@ -1930,7 +1932,7 @@
|
|||
file_offset = ROUND4(woff2.privOffset + woff2.privLength);
|
||||
}
|
||||
|
||||
if( file_offset != ( ROUND4( woff2.length ) ) )
|
||||
if ( file_offset != ( ROUND4( woff2.length ) ) )
|
||||
{
|
||||
error = FT_THROW( Invalid_Table );
|
||||
goto Exit;
|
||||
|
@ -1942,7 +1944,7 @@
|
|||
if ( *face_instance_index < 0 )
|
||||
face_index--;
|
||||
|
||||
if( face_index >= woff2.num_fonts )
|
||||
if ( face_index >= woff2.num_fonts )
|
||||
{
|
||||
if ( *face_instance_index >= 0 )
|
||||
{
|
||||
|
@ -1954,12 +1956,12 @@
|
|||
}
|
||||
|
||||
/* Only retain tables of the requested face in a TTC. */
|
||||
if( woff2.header_version )
|
||||
if ( woff2.header_version )
|
||||
{
|
||||
WOFF2_TtcFont ttc_font = woff2.ttc_fonts + face_index;
|
||||
|
||||
/* Create a temporary array. */
|
||||
if( FT_NEW_ARRAY( temp_indices,
|
||||
if ( FT_NEW_ARRAY( temp_indices,
|
||||
ttc_font->num_tables ) )
|
||||
goto Exit;
|
||||
|
||||
|
@ -1969,7 +1971,8 @@
|
|||
temp_indices[nn] = indices[ttc_font->table_indices[nn]];
|
||||
|
||||
/* Resize array to required size. */
|
||||
if( FT_RENEW_ARRAY( indices, woff2.num_tables,
|
||||
if ( FT_RENEW_ARRAY( indices,
|
||||
woff2.num_tables,
|
||||
ttc_font->num_tables ) )
|
||||
goto Exit;
|
||||
|
||||
|
@ -2042,7 +2045,7 @@
|
|||
(FT_Char)( table->Tag )));
|
||||
}
|
||||
|
||||
if( woff2.uncompressed_size < 1 )
|
||||
if ( woff2.uncompressed_size < 1 )
|
||||
{
|
||||
error = FT_THROW( Invalid_Table );
|
||||
goto Exit;
|
||||
|
@ -2056,7 +2059,7 @@
|
|||
/* Uncompress the stream. */
|
||||
error = woff2_uncompress( uncompressed_buf, woff2.uncompressed_size,
|
||||
stream->cursor, woff2.totalCompressedSize );
|
||||
if( error )
|
||||
if ( error )
|
||||
goto Exit;
|
||||
|
||||
FT_FRAME_EXIT();
|
||||
|
@ -2064,7 +2067,7 @@
|
|||
error = reconstruct_font( uncompressed_buf, woff2.uncompressed_size,
|
||||
indices, &woff2, &info, &sfnt, &sfnt_size,
|
||||
memory );
|
||||
if( error )
|
||||
if ( error )
|
||||
goto Exit;
|
||||
|
||||
/* Resize `sfnt' to actual size of sfnt stream. */
|
||||
|
@ -2094,7 +2097,7 @@
|
|||
face->root.face_flags &= ~FT_FACE_FLAG_EXTERNAL_STREAM;
|
||||
|
||||
/* Set face_index. */
|
||||
if( *face_instance_index < 0 )
|
||||
if ( *face_instance_index < 0 )
|
||||
*face_instance_index = -1;
|
||||
else
|
||||
*face_instance_index = 0;
|
||||
|
@ -2108,7 +2111,7 @@
|
|||
FT_FREE( tables );
|
||||
FT_FREE( indices );
|
||||
|
||||
if( error )
|
||||
if ( error )
|
||||
{
|
||||
FT_FREE( sfnt );
|
||||
if ( sfnt_stream )
|
||||
|
|
Loading…
Reference in New Issue