diff --git a/src/cff/t2load.c b/src/cff/t2load.c index 18bac5476..f3a0748c0 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; }