Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(56)

Side by Side Diff: third_party/freetype/src/base/ftrfork.c

Issue 1413673003: Update bundled freetype to 2.6.1 (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: DEPS for corpus Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « third_party/freetype/src/base/ftpic.c ('k') | third_party/freetype/src/base/ftsnames.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /***************************************************************************/ 1 /***************************************************************************/
2 /* */ 2 /* */
3 /* ftrfork.c */ 3 /* ftrfork.c */
4 /* */ 4 /* */
5 /* Embedded resource forks accessor (body). */ 5 /* Embedded resource forks accessor (body). */
6 /* */ 6 /* */
7 /* Copyright 2004-2010, 2013, 2014 by */ 7 /* Copyright 2004-2015 by */
8 /* Masatake YAMATO and Redhat K.K. */ 8 /* Masatake YAMATO and Redhat K.K. */
9 /* */ 9 /* */
10 /* FT_Raccess_Get_HeaderInfo() and raccess_guess_darwin_hfsplus() are */ 10 /* FT_Raccess_Get_HeaderInfo() and raccess_guess_darwin_hfsplus() are */
11 /* derived from ftobjs.c. */ 11 /* derived from ftobjs.c. */
12 /* */ 12 /* */
13 /* This file is part of the FreeType project, and may only be used, */ 13 /* This file is part of the FreeType project, and may only be used, */
14 /* modified, and distributed under the terms of the FreeType project */ 14 /* modified, and distributed under the terms of the FreeType project */
15 /* license, LICENSE.TXT. By continuing to use, modify, or distribute */ 15 /* license, LICENSE.TXT. By continuing to use, modify, or distribute */
16 /* this file you indicate that you have read the license and */ 16 /* this file you indicate that you have read the license and */
17 /* understand and accept it fully. */ 17 /* understand and accept it fully. */
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 { 56 {
57 FT_Error error; 57 FT_Error error;
58 unsigned char head[16], head2[16]; 58 unsigned char head[16], head2[16];
59 FT_Long map_pos, rdata_len; 59 FT_Long map_pos, rdata_len;
60 int allzeros, allmatch, i; 60 int allzeros, allmatch, i;
61 FT_Long type_list; 61 FT_Long type_list;
62 62
63 FT_UNUSED( library ); 63 FT_UNUSED( library );
64 64
65 65
66 error = FT_Stream_Seek( stream, rfork_offset ); 66 error = FT_Stream_Seek( stream, (FT_ULong)rfork_offset );
67 if ( error ) 67 if ( error )
68 return error; 68 return error;
69 69
70 error = FT_Stream_Read( stream, (FT_Byte *)head, 16 ); 70 error = FT_Stream_Read( stream, (FT_Byte *)head, 16 );
71 if ( error ) 71 if ( error )
72 return error; 72 return error;
73 73
74 *rdata_pos = rfork_offset + ( ( head[0] << 24 ) | 74 /* ensure positive values */
75 ( head[1] << 16 ) | 75 if ( head[0] >= 0x80 || head[4] >= 0x80 || head[8] >= 0x80 )
76 ( head[2] << 8 ) | 76 return FT_THROW( Unknown_File_Format );
77 head[3] ); 77
78 map_pos = rfork_offset + ( ( head[4] << 24 ) | 78 *rdata_pos = ( head[ 0] << 24 ) |
79 ( head[5] << 16 ) | 79 ( head[ 1] << 16 ) |
80 ( head[6] << 8 ) | 80 ( head[ 2] << 8 ) |
81 head[7] ); 81 head[ 3];
82 rdata_len = ( head[ 8] << 24 ) | 82 map_pos = ( head[ 4] << 24 ) |
83 ( head[ 9] << 16 ) | 83 ( head[ 5] << 16 ) |
84 ( head[10] << 8 ) | 84 ( head[ 6] << 8 ) |
85 head[11]; 85 head[ 7];
86 rdata_len = ( head[ 8] << 24 ) |
87 ( head[ 9] << 16 ) |
88 ( head[10] << 8 ) |
89 head[11];
86 90
87 /* map_len = head[12] .. head[15] */ 91 /* map_len = head[12] .. head[15] */
88 92
89 if ( *rdata_pos + rdata_len != map_pos || map_pos == rfork_offset ) 93 if ( *rdata_pos != map_pos - rdata_len || map_pos == 0 )
90 return FT_THROW( Unknown_File_Format ); 94 return FT_THROW( Unknown_File_Format );
91 95
92 error = FT_Stream_Seek( stream, map_pos ); 96 if ( FT_LONG_MAX - rfork_offset < *rdata_pos ||
97 FT_LONG_MAX - rfork_offset < map_pos )
98 return FT_THROW( Unknown_File_Format );
99
100 *rdata_pos += rfork_offset;
101 map_pos += rfork_offset;
102
103 error = FT_Stream_Seek( stream, (FT_ULong)map_pos );
93 if ( error ) 104 if ( error )
94 return error; 105 return error;
95 106
96 head2[15] = (FT_Byte)( head[15] + 1 ); /* make it be different */ 107 head2[15] = (FT_Byte)( head[15] + 1 ); /* make it be different */
97 108
98 error = FT_Stream_Read( stream, (FT_Byte*)head2, 16 ); 109 error = FT_Stream_Read( stream, (FT_Byte*)head2, 16 );
99 if ( error ) 110 if ( error )
100 return error; 111 return error;
101 112
102 allzeros = 1; 113 allzeros = 1;
(...skipping 14 matching lines...) Expand all
117 /* attributes. */ 128 /* attributes. */
118 (void)FT_STREAM_SKIP( 4 /* skip handle to next resource map */ 129 (void)FT_STREAM_SKIP( 4 /* skip handle to next resource map */
119 + 2 /* skip file resource number */ 130 + 2 /* skip file resource number */
120 + 2 ); /* skip attributes */ 131 + 2 ); /* skip attributes */
121 132
122 if ( FT_READ_USHORT( type_list ) ) 133 if ( FT_READ_USHORT( type_list ) )
123 return error; 134 return error;
124 if ( type_list == -1 ) 135 if ( type_list == -1 )
125 return FT_THROW( Unknown_File_Format ); 136 return FT_THROW( Unknown_File_Format );
126 137
127 error = FT_Stream_Seek( stream, map_pos + type_list ); 138 error = FT_Stream_Seek( stream, (FT_ULong)( map_pos + type_list ) );
128 if ( error ) 139 if ( error )
129 return error; 140 return error;
130 141
131 *map_offset = map_pos + type_list; 142 *map_offset = map_pos + type_list;
132 return FT_Err_Ok; 143 return FT_Err_Ok;
133 } 144 }
134 145
135 146
136 static int 147 static int
137 ft_raccess_sort_ref_by_id( FT_RFork_Ref* a, 148 ft_raccess_sort_ref_by_id( FT_RFork_Ref* a,
(...skipping 21 matching lines...) Expand all
159 FT_Error error; 170 FT_Error error;
160 int i, j, cnt, subcnt; 171 int i, j, cnt, subcnt;
161 FT_Long tag_internal, rpos; 172 FT_Long tag_internal, rpos;
162 FT_Memory memory = library->memory; 173 FT_Memory memory = library->memory;
163 FT_Long temp; 174 FT_Long temp;
164 FT_Long *offsets_internal = NULL; 175 FT_Long *offsets_internal = NULL;
165 FT_RFork_Ref *ref = NULL; 176 FT_RFork_Ref *ref = NULL;
166 177
167 178
168 FT_TRACE3(( "\n" )); 179 FT_TRACE3(( "\n" ));
169 error = FT_Stream_Seek( stream, map_offset ); 180 error = FT_Stream_Seek( stream, (FT_ULong)map_offset );
170 if ( error ) 181 if ( error )
171 return error; 182 return error;
172 183
173 if ( FT_READ_USHORT( cnt ) ) 184 if ( FT_READ_USHORT( cnt ) )
174 return error; 185 return error;
175 cnt++; 186 cnt++;
176 187
177 for ( i = 0; i < cnt; ++i ) 188 for ( i = 0; i < cnt; ++i )
178 { 189 {
179 if ( FT_READ_LONG( tag_internal ) || 190 if ( FT_READ_LONG( tag_internal ) ||
180 FT_READ_USHORT( subcnt ) || 191 FT_READ_USHORT( subcnt ) ||
181 FT_READ_USHORT( rpos ) ) 192 FT_READ_USHORT( rpos ) )
182 return error; 193 return error;
183 194
184 FT_TRACE2(( "Resource tags: %c%c%c%c\n", 195 FT_TRACE2(( "Resource tags: %c%c%c%c\n",
185 (char)( 0xff & ( tag_internal >> 24 ) ), 196 (char)( 0xFF & ( tag_internal >> 24 ) ),
186 (char)( 0xff & ( tag_internal >> 16 ) ), 197 (char)( 0xFF & ( tag_internal >> 16 ) ),
187 (char)( 0xff & ( tag_internal >> 8 ) ), 198 (char)( 0xFF & ( tag_internal >> 8 ) ),
188 (char)( 0xff & ( tag_internal >> 0 ) ) )); 199 (char)( 0xFF & ( tag_internal >> 0 ) ) ));
189 FT_TRACE3(( " : subcount=%d, suboffset=0x%04x\n", 200 FT_TRACE3(( " : subcount=%d, suboffset=0x%04x\n",
190 subcnt, rpos )); 201 subcnt, rpos ));
191 202
192 if ( tag_internal == tag ) 203 if ( tag_internal == tag )
193 { 204 {
194 *count = subcnt + 1; 205 *count = subcnt + 1;
195 rpos += map_offset; 206 rpos += map_offset;
196 207
197 error = FT_Stream_Seek( stream, rpos ); 208 error = FT_Stream_Seek( stream, (FT_ULong)rpos );
198 if ( error ) 209 if ( error )
199 return error; 210 return error;
200 211
201 if ( FT_NEW_ARRAY( ref, *count ) ) 212 if ( FT_NEW_ARRAY( ref, *count ) )
202 return error; 213 return error;
203 214
204 for ( j = 0; j < *count; ++j ) 215 for ( j = 0; j < *count; ++j )
205 { 216 {
206 if ( FT_READ_USHORT( ref[j].res_id ) ) 217 if ( FT_READ_USHORT( ref[j].res_id ) )
207 goto Exit; 218 goto Exit;
208 if ( FT_STREAM_SKIP( 2 ) ) /* resource name */ 219 if ( FT_STREAM_SKIP( 2 ) ) /* resource name */
209 goto Exit; 220 goto Exit;
210 if ( FT_READ_LONG( temp ) ) 221 if ( FT_READ_LONG( temp ) )
211 goto Exit; 222 goto Exit;
212 if ( FT_STREAM_SKIP( 4 ) ) /* mbz */ 223 if ( FT_STREAM_SKIP( 4 ) ) /* mbz */
213 goto Exit; 224 goto Exit;
214 225
215 ref[j].offset = temp & 0xFFFFFFL; 226 ref[j].offset = temp & 0xFFFFFFL;
216 FT_TRACE3(( " [%d]:" 227 FT_TRACE3(( " [%d]:"
217 " resource_id=0x%04x, offset=0x%08x\n", 228 " resource_id=0x%04x, offset=0x%08x\n",
218 j, ref[j].res_id, ref[j].offset )); 229 j, ref[j].res_id, ref[j].offset ));
219 } 230 }
220 231
221 if (sort_by_res_id) 232 if (sort_by_res_id)
222 { 233 {
223 ft_qsort( ref, *count, sizeof ( FT_RFork_Ref ), 234 ft_qsort( ref, (size_t)*count, sizeof ( FT_RFork_Ref ),
224 ( int(*)(const void*, const void*) ) 235 ( int(*)(const void*, const void*) )
225 ft_raccess_sort_ref_by_id ); 236 ft_raccess_sort_ref_by_id );
226 237
227 FT_TRACE3(( " -- sort resources by their ids --\n" )); 238 FT_TRACE3(( " -- sort resources by their ids --\n" ));
228 for ( j = 0; j < *count; ++ j ) { 239 for ( j = 0; j < *count; ++ j ) {
229 FT_TRACE3(( " [%d]:" 240 FT_TRACE3(( " [%d]:"
230 " resource_id=0x%04x, offset=0x%08x\n", 241 " resource_id=0x%04x, offset=0x%08x\n",
231 j, ref[j].res_id, ref[j].offset )); 242 j, ref[j].res_id, ref[j].offset ));
232 } 243 }
233 } 244 }
(...skipping 472 matching lines...) Expand 10 before | Expand all | Expand 10 after
706 char *base_file_name, 717 char *base_file_name,
707 FT_Int32 magic, 718 FT_Int32 magic,
708 FT_Long *result_offset ) 719 FT_Long *result_offset )
709 { 720 {
710 FT_Int32 magic_from_stream; 721 FT_Int32 magic_from_stream;
711 FT_Error error; 722 FT_Error error;
712 FT_Int32 version_number = 0; 723 FT_Int32 version_number = 0;
713 FT_UShort n_of_entries; 724 FT_UShort n_of_entries;
714 725
715 int i; 726 int i;
716 FT_UInt32 entry_id, entry_offset, entry_length = 0; 727 FT_Int32 entry_id, entry_offset, entry_length = 0;
717 728
718 const FT_UInt32 resource_fork_entry_id = 0x2; 729 const FT_Int32 resource_fork_entry_id = 0x2;
719 730
720 FT_UNUSED( library ); 731 FT_UNUSED( library );
721 FT_UNUSED( base_file_name ); 732 FT_UNUSED( base_file_name );
722 FT_UNUSED( version_number ); 733 FT_UNUSED( version_number );
723 FT_UNUSED( entry_length ); 734 FT_UNUSED( entry_length );
724 735
725 736
726 if ( FT_READ_LONG( magic_from_stream ) ) 737 if ( FT_READ_LONG( magic_from_stream ) )
727 return error; 738 return error;
728 if ( magic_from_stream != magic ) 739 if ( magic_from_stream != magic )
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
806 FT_UNUSED( error ); 817 FT_UNUSED( error );
807 818
808 819
809 new_length = ft_strlen( original_name ) + ft_strlen( insertion ); 820 new_length = ft_strlen( original_name ) + ft_strlen( insertion );
810 if ( FT_ALLOC( new_name, new_length + 1 ) ) 821 if ( FT_ALLOC( new_name, new_length + 1 ) )
811 return NULL; 822 return NULL;
812 823
813 tmp = ft_strrchr( original_name, '/' ); 824 tmp = ft_strrchr( original_name, '/' );
814 if ( tmp ) 825 if ( tmp )
815 { 826 {
816 ft_strncpy( new_name, original_name, tmp - original_name + 1 ); 827 ft_strncpy( new_name,
828 original_name,
829 (size_t)( tmp - original_name + 1 ) );
817 new_name[tmp - original_name + 1] = '\0'; 830 new_name[tmp - original_name + 1] = '\0';
818 slash = tmp + 1; 831 slash = tmp + 1;
819 } 832 }
820 else 833 else
821 { 834 {
822 slash = original_name; 835 slash = original_name;
823 new_name[0] = '\0'; 836 new_name[0] = '\0';
824 } 837 }
825 838
826 ft_strcat( new_name, insertion ); 839 ft_strcat( new_name, insertion );
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
858 offsets[i] = 0; 871 offsets[i] = 0;
859 errors[i] = FT_ERR( Unimplemented_Feature ); 872 errors[i] = FT_ERR( Unimplemented_Feature );
860 } 873 }
861 } 874 }
862 875
863 876
864 #endif /* !FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK */ 877 #endif /* !FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK */
865 878
866 879
867 /* END */ 880 /* END */
OLDNEW
« no previous file with comments | « third_party/freetype/src/base/ftpic.c ('k') | third_party/freetype/src/base/ftsnames.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698