[woff, woff2] Avoid buffer zeroing.
* src/sfnt/sfwoff.c (woff_open_font): Use Q-macros. * src/sfnt/sfwoff2.c: Ditto. (reconstruct_font): Allocate table_entry on stack.
This commit is contained in:
parent
4fef1fcede
commit
73631b9530
@ -196,8 +196,8 @@
|
||||
/* tag value, the tables themselves are not. We thus have to */
|
||||
/* sort them by offset and check that they don't overlap. */
|
||||
|
||||
if ( FT_NEW_ARRAY( tables, woff.num_tables ) ||
|
||||
FT_NEW_ARRAY( indices, woff.num_tables ) )
|
||||
if ( FT_QNEW_ARRAY( tables, woff.num_tables ) ||
|
||||
FT_QNEW_ARRAY( indices, woff.num_tables ) )
|
||||
goto Exit;
|
||||
|
||||
FT_TRACE2(( "\n" ));
|
||||
@ -328,9 +328,9 @@
|
||||
}
|
||||
|
||||
/* Now use `totalSfntSize'. */
|
||||
if ( FT_REALLOC( sfnt,
|
||||
12 + woff.num_tables * 16UL,
|
||||
woff.totalSfntSize ) )
|
||||
if ( FT_QREALLOC( sfnt,
|
||||
12 + woff.num_tables * 16UL,
|
||||
woff.totalSfntSize ) )
|
||||
goto Exit;
|
||||
|
||||
sfnt_header = sfnt + 12;
|
||||
|
@ -229,9 +229,9 @@
|
||||
{
|
||||
FT_TRACE6(( "Reallocating %lu to %lu.\n",
|
||||
*dst_size, (*offset + size) ));
|
||||
if ( FT_REALLOC( dst,
|
||||
(FT_ULong)( *dst_size ),
|
||||
(FT_ULong)( *offset + size ) ) )
|
||||
if ( FT_QREALLOC( dst,
|
||||
(FT_ULong)( *dst_size ),
|
||||
(FT_ULong)( *offset + size ) ) )
|
||||
goto Exit;
|
||||
|
||||
*dst_size = *offset + size;
|
||||
@ -784,7 +784,7 @@
|
||||
goto Fail;
|
||||
|
||||
loca_buf_size = loca_values_size * offset_size;
|
||||
if ( FT_QNEW_ARRAY( loca_buf, loca_buf_size ) )
|
||||
if ( FT_QALLOC( loca_buf, loca_buf_size ) )
|
||||
goto Fail;
|
||||
|
||||
dst = loca_buf;
|
||||
@ -863,7 +863,7 @@
|
||||
WOFF2_Point points = NULL;
|
||||
|
||||
|
||||
if ( FT_NEW_ARRAY( substreams, num_substreams ) )
|
||||
if ( FT_QNEW_ARRAY( substreams, num_substreams ) )
|
||||
goto Fail;
|
||||
|
||||
if ( FT_STREAM_SKIP( 2 ) )
|
||||
@ -926,7 +926,7 @@
|
||||
offset += overlap_bitmap_length;
|
||||
}
|
||||
|
||||
if ( FT_NEW_ARRAY( loca_values, num_glyphs + 1 ) )
|
||||
if ( FT_QNEW_ARRAY( loca_values, num_glyphs + 1 ) )
|
||||
goto Fail;
|
||||
|
||||
points_size = 0;
|
||||
@ -938,10 +938,10 @@
|
||||
substreams[BBOX_STREAM].offset += bbox_bitmap_length;
|
||||
|
||||
glyph_buf_size = WOFF2_DEFAULT_GLYPH_BUF;
|
||||
if ( FT_NEW_ARRAY( glyph_buf, glyph_buf_size ) )
|
||||
if ( FT_QALLOC( glyph_buf, glyph_buf_size ) )
|
||||
goto Fail;
|
||||
|
||||
if ( FT_NEW_ARRAY( info->x_mins, num_glyphs ) )
|
||||
if ( FT_QNEW_ARRAY( info->x_mins, num_glyphs ) )
|
||||
goto Fail;
|
||||
|
||||
for ( i = 0; i < num_glyphs; ++i )
|
||||
@ -999,7 +999,7 @@
|
||||
size_needed = 12 + composite_size + instruction_size;
|
||||
if ( glyph_buf_size < size_needed )
|
||||
{
|
||||
if ( FT_RENEW_ARRAY( glyph_buf, glyph_buf_size, size_needed ) )
|
||||
if ( FT_QREALLOC( glyph_buf, glyph_buf_size, size_needed ) )
|
||||
goto Fail;
|
||||
glyph_buf_size = size_needed;
|
||||
}
|
||||
@ -1075,7 +1075,7 @@
|
||||
have_overlap = TRUE;
|
||||
}
|
||||
|
||||
if ( FT_NEW_ARRAY( n_points_arr, n_contours ) )
|
||||
if ( FT_QNEW_ARRAY( n_points_arr, n_contours ) )
|
||||
goto Fail;
|
||||
|
||||
if ( FT_STREAM_SEEK( substreams[N_POINTS_STREAM].offset ) )
|
||||
@ -1112,7 +1112,7 @@
|
||||
|
||||
/* Create array to store point information. */
|
||||
points_size = total_n_points;
|
||||
if ( FT_NEW_ARRAY( points, points_size ) )
|
||||
if ( FT_QNEW_ARRAY( points, points_size ) )
|
||||
goto Fail;
|
||||
|
||||
if ( triplet_decode( flags_buf,
|
||||
@ -1141,7 +1141,7 @@
|
||||
instruction_size;
|
||||
if ( glyph_buf_size < size_needed )
|
||||
{
|
||||
if ( FT_RENEW_ARRAY( glyph_buf, glyph_buf_size, size_needed ) )
|
||||
if ( FT_QREALLOC( glyph_buf, glyph_buf_size, size_needed ) )
|
||||
goto Fail;
|
||||
glyph_buf_size = size_needed;
|
||||
}
|
||||
@ -1226,8 +1226,7 @@
|
||||
*glyf_checksum += compute_ULong_sum( glyph_buf, glyph_size );
|
||||
|
||||
/* Store x_mins, may be required to reconstruct `hmtx'. */
|
||||
if ( n_contours > 0 )
|
||||
info->x_mins[i] = (FT_Short)x_min;
|
||||
info->x_mins[i] = (FT_Short)x_min;
|
||||
}
|
||||
|
||||
info->glyf_table->dst_length = dest_offset - info->glyf_table->dst_offset;
|
||||
@ -1344,7 +1343,7 @@
|
||||
offset_size = index_format ? 4 : 2;
|
||||
|
||||
/* Create `x_mins' array. */
|
||||
if ( FT_NEW_ARRAY( info->x_mins, num_glyphs ) )
|
||||
if ( FT_QNEW_ARRAY( info->x_mins, num_glyphs ) )
|
||||
return error;
|
||||
|
||||
loca_offset = info->loca_table->src_offset;
|
||||
@ -1432,8 +1431,8 @@
|
||||
if ( num_hmetrics < 1 )
|
||||
goto Fail;
|
||||
|
||||
if ( FT_NEW_ARRAY( advance_widths, num_hmetrics ) ||
|
||||
FT_NEW_ARRAY( lsbs, num_glyphs ) )
|
||||
if ( FT_QNEW_ARRAY( advance_widths, num_hmetrics ) ||
|
||||
FT_QNEW_ARRAY( lsbs, num_glyphs ) )
|
||||
goto Fail;
|
||||
|
||||
/* Read `advanceWidth' stream. Always present. */
|
||||
@ -1484,7 +1483,7 @@
|
||||
|
||||
/* Build the hmtx table. */
|
||||
hmtx_table_size = 2 * num_hmetrics + 2 * num_glyphs;
|
||||
if ( FT_NEW_ARRAY( hmtx_table, hmtx_table_size ) )
|
||||
if ( FT_QALLOC( hmtx_table, hmtx_table_size ) )
|
||||
goto Fail;
|
||||
|
||||
dst = hmtx_table;
|
||||
@ -1541,10 +1540,10 @@
|
||||
{
|
||||
/* Memory management of `transformed_buf' is handled by the caller. */
|
||||
|
||||
FT_Error error = FT_Err_Ok;
|
||||
FT_Stream stream = NULL;
|
||||
FT_Byte* buf_cursor = NULL;
|
||||
FT_Byte* table_entry = NULL;
|
||||
FT_Error error = FT_Err_Ok;
|
||||
FT_Stream stream = NULL;
|
||||
FT_Byte* buf_cursor = NULL;
|
||||
FT_Byte table_entry[16];
|
||||
|
||||
/* We are reallocating memory for `sfnt', so its pointer may change. */
|
||||
FT_Byte* sfnt = *sfnt_bytes;
|
||||
@ -1585,10 +1584,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
/* Create buffer for table entries. */
|
||||
if ( FT_NEW_ARRAY( table_entry, 16 ) )
|
||||
goto Fail;
|
||||
|
||||
/* Create a stream for the uncompressed buffer. */
|
||||
if ( FT_NEW( stream ) )
|
||||
goto Fail;
|
||||
@ -1751,7 +1746,6 @@
|
||||
/* Set pointer of sfnt stream to its correct value. */
|
||||
*sfnt_bytes = sfnt;
|
||||
|
||||
FT_FREE( table_entry );
|
||||
FT_Stream_Close( stream );
|
||||
FT_FREE( stream );
|
||||
|
||||
@ -1764,7 +1758,6 @@
|
||||
/* Set pointer of sfnt stream to its correct value. */
|
||||
*sfnt_bytes = sfnt;
|
||||
|
||||
FT_FREE( table_entry );
|
||||
FT_Stream_Close( stream );
|
||||
FT_FREE( stream );
|
||||
|
||||
@ -1877,8 +1870,8 @@
|
||||
woff2.ttc_fonts = NULL;
|
||||
|
||||
/* Read table directory. */
|
||||
if ( FT_NEW_ARRAY( tables, woff2.num_tables ) ||
|
||||
FT_NEW_ARRAY( indices, woff2.num_tables ) )
|
||||
if ( FT_QNEW_ARRAY( tables, woff2.num_tables ) ||
|
||||
FT_QNEW_ARRAY( indices, woff2.num_tables ) )
|
||||
goto Exit;
|
||||
|
||||
FT_TRACE2(( "\n" ));
|
||||
@ -1949,10 +1942,11 @@
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
table->flags = flags;
|
||||
table->src_offset = src_offset;
|
||||
table->src_length = table->TransformLength;
|
||||
src_offset += table->TransformLength;
|
||||
table->flags = flags;
|
||||
table->dst_offset = 0;
|
||||
|
||||
FT_TRACE2(( " %c%c%c%c %08d %08d %08ld %08ld %08ld\n",
|
||||
(FT_Char)( table->Tag >> 24 ),
|
||||
@ -2010,7 +2004,7 @@
|
||||
|
||||
FT_TRACE4(( "Number of fonts in TTC: %d\n", woff2.num_fonts ));
|
||||
|
||||
if ( FT_NEW_ARRAY( woff2.ttc_fonts, woff2.num_fonts ) )
|
||||
if ( FT_QNEW_ARRAY( woff2.ttc_fonts, woff2.num_fonts ) )
|
||||
goto Exit;
|
||||
|
||||
for ( nn = 0; nn < woff2.num_fonts; nn++ )
|
||||
@ -2023,7 +2017,7 @@
|
||||
if ( FT_READ_ULONG( ttc_font->flavor ) )
|
||||
goto Exit;
|
||||
|
||||
if ( FT_NEW_ARRAY( ttc_font->table_indices, ttc_font->num_tables ) )
|
||||
if ( FT_QNEW_ARRAY( ttc_font->table_indices, ttc_font->num_tables ) )
|
||||
goto Exit;
|
||||
|
||||
FT_TRACE5(( "Number of tables in font %d: %d\n",
|
||||
@ -2302,9 +2296,9 @@
|
||||
{
|
||||
FT_TRACE5(( "Trimming sfnt stream from %lu to %lu.\n",
|
||||
sfnt_size, woff2.actual_sfnt_size ));
|
||||
if ( FT_REALLOC( sfnt,
|
||||
(FT_ULong)( sfnt_size ),
|
||||
(FT_ULong)( woff2.actual_sfnt_size ) ) )
|
||||
if ( FT_QREALLOC( sfnt,
|
||||
(FT_ULong)( sfnt_size ),
|
||||
(FT_ULong)( woff2.actual_sfnt_size ) ) )
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user