Applied Tom's patches to improve CFF handling.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
diff --git a/src/cff/t2load.c b/src/cff/t2load.c
index 18bac54..f3a0748 100644
--- a/src/cff/t2load.c
+++ b/src/cff/t2load.c
@@ -406,22 +406,35 @@
error = t2_new_cff_index( &font->charstrings_index, stream, 0 );
if (error) goto Exit;
- /* read the local subrs */
- if ( FILE_Seek( base_offset + font->top_dict.private_offset +
- font->private_dict.local_subrs_offset ) )
- goto Exit;
+ /* read the local subrs, if any */
+
+ if (font->private_dict.local_subrs_offset) {
+
+ if ( FILE_Seek( base_offset + font->top_dict.private_offset +
+ font->private_dict.local_subrs_offset ) )
+ goto Exit;
- error = t2_new_cff_index( &font->local_subrs_index, stream, 1 );
- if (error) goto Exit;
+ error = t2_new_cff_index( &font->local_subrs_index, stream, 1 );
+ if (error) goto Exit;
+ }
/* explicit the global and local subrs */
- font->num_local_subrs = font->local_subrs_index.count;
+
+ if (font->private_dict.local_subrs_offset) {
+ font->num_local_subrs = font->local_subrs_index.count;
+ } else {
+ font->num_local_subrs = 0;
+ }
+
font->num_global_subrs = font->global_subrs_index.count;
- error = t2_explicit_cff_index( &font->global_subrs_index,
- &font->global_subrs ) ||
- t2_explicit_cff_index( &font->local_subrs_index,
- &font->local_subrs );
+
+ error = t2_explicit_cff_index( &font->global_subrs_index, &font->global_subrs ) ;
+
+ if (font->private_dict.local_subrs_offset) {
+ error |= t2_explicit_cff_index( &font->local_subrs_index, &font->local_subrs ) ;
+ }
+
if (error) goto Exit;
}