blob: 775201abc6651885417f5759b1e933b46af7494c [file] [log] [blame]
Werner Lemberg1fecdfe2016-12-24 07:50:45 +010012016-12-24 Werner Lemberg <wl@gnu.org>
2
Werner Lembergd1db57c2016-12-24 09:05:16 +01003 * src/sfnt/ttsbit.c (tt_face_load_sbit): Allow more version values.
4
5 Some fonts seem to have the `version' field in the wrong byte order.
6
7 Problem reported by 張俊芝 <418092625@qq.com>.
8
92016-12-24 Werner Lemberg <wl@gnu.org>
10
Werner Lembergfde0b782016-12-24 08:17:19 +010011 * src/truetype/ttpload.c (tt_face_load_loca): Sanitize table length.
12
13 This trivial fix allows us to accept more fonts.
14
15 Problem reported by 張俊芝 <418092625@qq.com>.
16
172016-12-24 Werner Lemberg <wl@gnu.org>
18
Werner Lemberg1fecdfe2016-12-24 07:50:45 +010019 * src/sfnt/sfobjs.c (sfnt_init_face): Fix tracing.
20
Werner Lembergada82972016-12-22 08:25:42 +0100212016-12-22 Werner Lemberg <wl@gnu.org>
22
Werner Lemberg18bd1762016-12-22 12:24:23 +010023 * CMakeLists.txt: Make it work with cmake 2.8.11.2 (#49909).
24
252016-12-22 Werner Lemberg <wl@gnu.org>
26
Werner Lemberg06d61b42016-12-22 10:43:46 +010027 Ensure used preprocessor symbols are defined (#49790).
28
29 * builds/unix/ftconfig.in, builds/vms/ftconfig.h,
30 include/freetype/config/ftconfig.h: Check `__GNUC__', `__IBMC__',
31 and `__SUNPRO_C' correctly.
32
332016-12-22 Werner Lemberg <wl@gnu.org>
34
Werner Lemberg7f733392016-12-22 10:12:17 +010035 * src/base/ftrfork.c (FT_Raccess_Get_DataOffsets): Check `count'.
36
37 Reported as
38
39 https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=308
40
412016-12-22 Werner Lemberg <wl@gnu.org>
42
Werner Lembergb44e6c22016-12-22 08:30:15 +010043 [cff] Protect against invalid `vsindex' and `blend' values.
44
45 Reported as
46
47 https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=305
48
49 * src/cff/cf2intrp.c (cf2_interpT2CharString) <cf2_cmdVSINDEX,
50 cf2_cmdBLEND>: Implement it.
51
522016-12-22 Werner Lemberg <wl@gnu.org>
53
Werner Lembergada82972016-12-22 08:25:42 +010054 [ftfuzzer] Always use Adobe CFF engine.
55
56 * src/tools/ftfuzzer/ftfuzzer.cc (FT_Global::FT_Global): Implement
57 it.
58
Werner Lemberg57a67332016-12-21 06:52:23 +0100592016-12-21 Werner Lemberg <wl@gnu.org>
60
Werner Lembergd44daf92016-12-21 23:03:48 +010061 * src/truetype/ttgxvar.c (TT_Vary_Apply_Glyph_Deltas): Thinko.
62
Werner Lemberg72091102016-12-21 23:46:29 +010063 I should really stop coding late in the evening...
64
65 Thanks again to Ben for checking.
66
672016-12-21 Werner Lemberg <wl@gnu.org>
68
Werner Lemberg8d37efb2016-12-22 20:48:28 +010069 [autofit] Support variation fonts.
70
71 (This ChangeLog entry was added later on.)
72
73 * src/autofit/afglobal.c (af_face_globals_free): Remove useless
74 code.
75
76 * src/base/ftmm.c (FT_Set_MM_Design_Coordinates,
77 * FT_Set_Var_Design_Coordinates, FT_Set_MM_Blend_Coordinates,
78 FT_Set_Var_Blend_Coordinates): Finalize
79 auto-hinter data to enforce recomputation. Note that this is a
80 brute-force method which should be improved.
81
822016-12-21 Werner Lemberg <wl@gnu.org>
83
Werner Lemberg72091102016-12-21 23:46:29 +010084 * src/truetype/ttgxvar.c (TT_Vary_Apply_Glyph_Deltas): Thinko.
85
Werner Lembergd44daf92016-12-21 23:03:48 +010086 Don't apply deltas twice for non-phantom points.
87
88 Spotted by Ben Wagner.
89
902016-12-21 Werner Lemberg <wl@gnu.org>
91
Werner Lemberge6a429e2016-12-21 20:27:48 +010092 [cff, truetype] Another try for #49829.
93
94 * src/cff/cffdrivr.c: Don't include
95 `FT_SERVICE_METRICS_VARIATIONS_H'.
96 (cff_get_advances): Use `ttface->variation_support'.
97
98 * src/truetype/ttdriver.c (tt_get_advances): Use
99 `ttface->variation_support'.
100
101 * src/truetype/ttgload.c (TT_Process_Simple_Glyph,
102 load_truetype_glyph): Use `ttface->variation_support'.
103
1042016-12-21 Werner Lemberg <wl@gnu.org>
105
Werner Lemberg64a91132016-12-21 19:30:33 +0100106 [truetype, sfnt] Introduce font variation flags to `TT_Face'.
107
108 * include/freetype/internal/tttypes.h (TT_FACE_FLAG_VAR_XXX):
109 New macros describing available functionality of various OpenType
110 tables related to font variation.
111 (TT_Face): New fields `variation_support' and `mvar_support',
112 replacing and extending `use_fvar'.
113
114 * src/sfnt/sfobjs.c (sfnt_init_face, sfnt_load_face): Use
115 `variation_support'.
116
117 * src/truetype/ttgxvar.c (ft_var_load_hvar): Set `variation_support'
118 field.
119 (TT_Vary_Apply_Glyph_Deltas): Updated.
120
1212016-12-21 Werner Lemberg <wl@gnu.org>
122
Werner Lemberg57a67332016-12-21 06:52:23 +0100123 [base] Improve sanity check for Mac resources (#49888).
124
125 * src/base/ftobjs.c (Mac_Read_sfnt_Resource): Abort if `rlen' is not
126 positive.
127
Werner Lemberg70704b32016-12-20 12:27:22 +01001282016-12-20 Werner Lemberg <wl@gnu.org>
129
Werner Lembergded4bdb2016-12-20 23:26:38 +0100130 [base] More sanity checks for Mac resources.
131
132 We use
133
134 https://github.com/kreativekorp/ksfl/wiki/Macintosh-Resource-File-Format
135
136 and
137
138 https://developer.apple.com/legacy/library/documentation/mac/pdf/MoreMacintoshToolbox.pdf#page=151
139
140 as references.
141
142 * include/freetype/internal/ftrfork.h (FT_RFork_Ref): Use FT_Short
143 for `res_id'.
144
145 * src/base/ftrfork.c (FT_Raccess_Get_HeaderInfo): Extract map length
146 and use it to improve sanity checks.
147 Follow the specification more closely;in particular, all data types
148 are signed, not unsigned.
149 (FT_Raccess_Get_DataOffsets): Follow the specification more closely;
150 in particular, all data types are signed, not unsigned.
151 Add some sanity checks.
152
1532016-12-20 Werner Lemberg <wl@gnu.org>
154
Werner Lemberg70704b32016-12-20 12:27:22 +0100155 [truetype] Improve logic for getting fast advance widths.
156
157 * src/cff/cffdrivr.c (cff_get_advances), src/truetype/ttdriver.c
158 (tt_get_advances): Use `is_default_instance' for test; this gets
159 recomputed after changing blend coordinates.
160
Ben Wagnercc576f82016-12-20 11:37:42 +01001612016-12-20 Ben Wagner <bungeman@google.com>
162 Werner Lemberg <wl@gnu.org>
163
Werner Lembergd678b372016-12-20 12:45:31 +0100164 [truetype] Fix linear metrics of GX variation fonts (#49829).
Ben Wagnercc576f82016-12-20 11:37:42 +0100165
166 When asking for an unhinted non-default variations,
167 `linearVertAdvance' is currently the value from the `hmtx' table
168 instead of the actual value after applying the variation. `HVAR'
169 support fixes this, but fonts will exist without that table and will
170 need sane fallback.
171
Werner Lembergd678b372016-12-20 12:45:31 +0100172 Problem also reported as
Werner Lemberg59b0b3a2016-12-20 11:39:52 +0100173
174 https://bugs.chromium.org/p/skia/issues/detail?id=5917
175
Ben Wagnercc576f82016-12-20 11:37:42 +0100176 * src/truetype/ttgload.c (TT_Process_Simple_Glyph,
177 load_truetype_glyph): Implement linear advance adjustments if `HVAR'
178 or `VVAR' tables are missing.
179
Werner Lemberga1e85f12016-12-20 10:52:26 +01001802016-12-20 Werner Lemberg <wl@gnu.org>
181
182 [cff, truetype] Fast advance width retrieval for fonts with HVAR.
183
184 Everything is guarded with TT_CONFIG_OPTION_GX_VAR_SUPPORT.
185
186 * src/base/ftadvanc.c (LOAD_ADVANCE_FAST_CHECK): Don't handle MM.
187
188 * src/cff/cffdrivr.c: Include FT_SERVICE_METRICS_VARIATIONS_H.
189 (cff_get_advances): Test for HVAR and VVAR.
190
191 * src/truetype/ttdriver.c (tt_get_advances): Test for HVAR and VVAR.
192
Werner Lemberg8f633a02016-12-18 06:42:31 +01001932016-12-18 Werner Lemberg <wl@gnu.org>
194
Werner Lemberg5743df72016-12-18 21:01:03 +0100195 [base] Fix invalid mac font recursion.
196
197 Reported as
198
199 https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=304
200
201 * src/base/ftobjs.c (FT_Open_Face): Code moved to...
202 (ft_open_face_internal): ... this function.
203 Add a parameter to control whether we try special Mac font handling
204 in case of failure.
205 (FT_Open_Face, FT_New_Face, FT_New_Memory_Face,
206 open_face_from_buffer): Use `ft_open_face_internal'.
207
2082016-12-18 Werner Lemberg <wl@gnu.org>
209
Werner Lembergca3d4012016-12-18 18:23:19 +0100210 * src/cff/cffobjs.c (cff_face_init): Make named instances work.
211
2122016-12-18 Werner Lemberg <wl@gnu.org>
213
Werner Lemberga8652c52016-12-18 18:12:03 +0100214 [truetype, cff] Extend `get_var_blend' function of MM service.
215
216 In particular, we need access to named instance data.
217
218 * include/freetype/internal/services/svmm.h (FT_Get_Var_Blend_Func):
219 Add argument for `FT_MM_Var'.
220
221 * src/cff/cffload.c (cff_get_var_blend): Updated.
222 * src/cff/cffload.h: Updated.
223
224 * src/cff/cf2ft.c (cf2_getNormalizedVector): Updated.
225
226 * src/truetype/ttgxvar.c (tt_get_var_blend): Updated.
227 Accept value `NULL' for arguments.
228 * src/truetype/ttgxvar.h: Updated.
229
2302016-12-18 Werner Lemberg <wl@gnu.org>
231
Werner Lemberg25f3ac22016-12-18 15:50:18 +0100232 [sfnt] Handle `fvar' with zero axes as a non-MM font.
233
234 This is better behaviour than exiting with an error.
235
236 * include/freetype/internal/tttypes.h (TT_Face): Add `use_fvar'
237 field.
238
239 * src/sfnt/sfobjs.c (sfnt_init_face): Compute `use_fvar', also
240 updating the validation code.
241 Use `use_fvar' to compute FT_FACE_FLAG_MULTIPLE_MASTERS.
242
243 * src/truetype/ttgxvar.c (TT_Get_MM_Var): Remove `fvar' validation
244 code.
245
2462016-12-18 Werner Lemberg <wl@gnu.org>
247
Werner Lembergeb6d0202016-12-18 09:29:58 +0100248 Minor GX code shuffling.
249
250 * include/freetype/internal/tttypes.h (TT_Face): Move
251 `is_default_instance' into TT_CONFIG_OPTION_GX_VAR_SUPPORT
252 block.
253
254 * src/sfnt/sfobjs.c (sfnt_init_face): Updated.
255 * src/truetype/ttgload.c (IS_DEFAULT_INSTANCE): New macro.
256 (TT_Load_Glyph): Use it.
257
2582016-12-18 Werner Lemberg <wl@gnu.org>
259
Werner Lemberg8f633a02016-12-18 06:42:31 +0100260 [cff] Better handling of non-CFF font formats.
261
262 * src/cff/cffload.c (cff_font_load): Pure CFFs don't have a
263 signature, so return `FT_Err_Unknown_File_Format' more often.
264
Werner Lemberg50ff6c12016-12-17 07:44:46 +01002652016-12-17 Werner Lemberg <wl@gnu.org>
266
Werner Lemberg4cd68172016-12-17 22:52:50 +0100267 * src/cff/cffload.c (cff_build_blend_vector): Remove redundant code.
268
2692016-12-17 Werner Lemberg <wl@gnu.org>
270
Werner Lembergdb17ceb2016-12-17 13:39:31 +0100271 * src/truetype/ttobjs.c (tt_face_init): Simplify conditional code.
272
2732016-12-17 Werner Lemberg <wl@gnu.org>
274
Werner Lemberg7c75b162016-12-17 13:28:24 +0100275 [sfnt, truetype] Various sanitizing fixes.
276
277 * src/sfnt/sfobjs.c (sfnt_init_face): If the axis count in `fvar' is
278 zero, set `num_instances' to zero.
279
280 * src/truetype/ttgxvar.c (TT_Get_MM_Var): Handle `fvar' table with
281 zero axes as invalid.
282
283 * src/truetype/ttobjs.c (tt_face_init): Improve logic of loading
284 `loca', `cvt', `fpgm', and `prep' table.
285
2862016-12-17 Werner Lemberg <wl@gnu.org>
287
Werner Lemberg3b125e92016-12-17 10:02:19 +0100288 Improve tracing of `FT_Open_Face'.
289
290 * src/base/ftobjs.c (FT_Open_Face): Return info on number of
291 available faces and numbered instances, or the indices of the
292 requested face and numbered instance.
293
294 * src/sfnt/sfobjs. (sfnt_open_font): Trace number of subfonts.
295
2962016-12-17 Werner Lemberg <wl@gnu.org>
297
Werner Lemberg50ff6c12016-12-17 07:44:46 +0100298 * src/cff/cffload.c (cff_load_private_dict): Always init `blend'.
299
300 Reported as
301
302 https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=295
303
Werner Lembergbeecf802016-12-16 08:52:03 +01003042016-12-16 Werner Lemberg <wl@gnu.org>
305
Werner Lembergdf2cf432016-12-16 11:38:20 +0100306 [truetype] Fix `cvar' sanity test.
307
308 Reported by Dave Arnold.
309
310 * src/truetype/ttgxvar.c (tt_face_vary_cvt): Use tuple count mask.
311
3122016-12-16 Werner Lemberg <wl@gnu.org>
313
Werner Lemberg68620242016-12-16 11:15:17 +0100314 [cff, truetype] Remove compiler warnings; fix `make multi'.
315
316 * src/cff/cf2font.h: Include `cffload.h'.
317
318 * src/cff/cffload.c: Include FT_MULTIPLE_MASTERS_H and
319 FT_SERVICE_MULTIPLE_MASTERS_H.
320 (cff_vstore_load): Eliminate `vsSize'.
321 (cff_load_private_dict): Tag as `FT_LOCAL_DEF'.
322
323 * src/cff/cffload.h: Include `cffobjs.h'.
324 Provide declaration for `cff_load_private_dict'.
325
326 * src/truetype/ttgxvar.c (ft_var_load_hvar): Eliminate
327 `minorVersion' and `map_offset'.
328
3292016-12-16 Werner Lemberg <wl@gnu.org>
330
Werner Lembergbeecf802016-12-16 08:52:03 +0100331 [cff] Fix heap buffer overflow (#49858).
332
333 * src/cff/cffparse.c (cff_parser_run): Add one more stack size
334 check.
335
Werner Lemberg01658be2016-12-15 23:10:59 +01003362016-12-15 Werner Lemberg <wl@gnu.org>
337
338 Fix clang warnings.
339
340 * src/cff/cffload.c (cff_blend_doBlend): Add cast.
341 (cff_subfont_load): Set `error' correctly.
342
343 * src/sfnt/ttmtx.c (tt_face_get_metrics): Typo.
344
Dave Arnold9f62d2c2016-12-15 20:27:47 +01003452016-12-15 Dave Arnold <darnold@adobe.com>
346 Werner Lemberg <wl@gnu.org>
347
Dave Arnoldedf40142016-12-15 21:56:44 +0100348 [cff] Implement CFF2 support (2/2).
349
350 The font variation code. All parts dependent on the GX code in the
351 `truetype' module are guarded with TT_CONFIG_OPTION_GX_VAR_SUPPORT.
352 In other words, you can still compile the `cff' module without
353 defining TT_CONFIG_OPTION_GX_VAR_SUPPORT (which brings you CFF2
354 support without font variation).
355
356 * src/cff/cf2font.c (cf2_font_setup): Add support for font
357 variation.
358 * src/cff/cf2font.h (CF2_Font): Add fields for variation data.
359
360 * src/cff/cf2ft.c (cf2_free_instance): Free blend data.
361 (cf2_getVStore, cf2_getNormalizedVector): New functions.
362 * src/cff/cf2ft.h: Updated.
363
364 * src/cff/cf2intrp.c: Include `cffload.h'.
365 (cf2_cmdRESERVED_15, cf2_cmdRESERVED_16): Replace with...
366 (cf2_cmdVSINDEX, cf2_cmdBLEND): ... this new enum values.
367 (cf2_doBlend): New function.
368 (cf2_interpT2CharString): Handle `vsindex' and `blend' opcodes.
369
370 * src/cff/cffload.c (FT_fdot14ToFixed): New macro.
371 (cff_vstore_done, cff_vstore_load): New functions.
372 (cff_blend_clear, cff_blend_doBlend, cff_blend_build_vector,
373 cff_blend_check_vector): New functions.
374 (cff_load_private_dict): Add arguments for blend vector.
375 Handle blend data.
376 (cff_subfont_load, cff_subfont_done): Updated.
377 (cff_font_load): Handle CFF2 variation store data.
378 (cff_font_done): Updated.
379 * src/cff/cffload.h: Include `cffparse.h'.
380 Updated.
381
382 * src/cff/cffobjs.c (cff_face_done): Updated.
383
384 * src/cff/cffparse.c: Include `cffload.h'.
385 (cff_parse_num): Handle internal value 255.
386 (cff_parse_vsindex, cff_parse_blend): New functions.
387 (CFF_FIELD_BLEND): New macro.
388 (cff_parser_run): Updated.
389 * src/cff/cffparse.h (cff_kind_blend): New enum value.
390
391 * src/cff/cfftoken.h: Handle `vstore', `vsindex', and `blend'
392 dictionary values.
393
394 * src/cff/cfftypes.h (CFF_VarData, CFF_AxisCoords, CFF_VarRegion,
395 CFF_VStore, CFF_Blend): New structures.
396 (CFF_FontRecDict): Add `vstore_offset' field.
397 (CFF_Private): Add `vsindex' field.
398 (CFF_SubFont): Add fields for blend data.
399 (CFF_Font): Add `vstore' field.
400
401 * src/truetype/ttgxvar.c (TT_Get_MM_Var): `CFF2' is equal to `gvar',
402 since glyph variation data is directly embedded.
403 (TT_Set_MM_Blend): Don't load `gvar' table for CFF2 fonts.
404
4052016-12-15 Dave Arnold <darnold@adobe.com>
406 Werner Lemberg <wl@gnu.org>
407
Dave Arnold9f62d2c2016-12-15 20:27:47 +0100408 [cff] Implement CFF2 support (1/2).
409
410 This commit does not contain the blend code for font variation
411 support, which follows in another commit.
412
413 You should ignore whitespace while inspecting this commit.
414
415 * include/freetype/internal/tttypes.h (TT_Face): Add `isCFF2'
416 member.
417
418 * src/cff/cf2font.h (CF2_Font): Add `isCFF2' member.
419
420 * src/cff/cf2ft.c (cf2_decoder_parse_charstrings): Handle `isCFF2'
421 flag.
422 (cf2_getMaxstack): New function.
423 * src/cff/cf2ft.h: Updated.
424
425 * src/cff/cf2intrp.c (cf2_escRESERVED_38): New enum.
426 (cf2_interpT2CharString): Handle CFF2 differences.
427 Add tracing message for errors.
428
429 * src/cff/cffdrivr.c (cff_get_glyph_name, cff_get_name_index):
430 Update for CFF2.
431
432 * src/cff/cffload.c (FT_FIXED_ONE): New macro.
433 (cff_index_init, cff_index_load_offsets, cff_index_access_element,
434 cff_index_get_name, cff_ft_select_get, cff_load_private_dict,
435 cff_subfont_load, cff_font_load): Handle CFF2.
436 * src/cff/cffload.h: Updated.
437
438 * src/cff/cffobjs.c (cff_face_init): Handle CFF2.
439
440 * src/cff/cffparse.c (cff_parse_maxstack): New function.
441 (CFFCODE_TOPDICT, CFFCODE_PRIVATE): Removed
442 * src/cff/cffparse.h (CFF2_MAX_STACK, CFF2_DEFAULT_STACK): New
443 macros.
444 (CFF2_CODE_TOPDICT, CFF2_CODE_FONTDICT, CFF2_CODE_PRIVATE): New
445 macros.
446
447 * src/cff/cfftoken.h: Add fields for CFF2 dictionaries (but no blend
448 stuff).
449
450 * src/cff/cfftypes.h (CFF_Index): Add `hdr_size' field.
451 (CFF_FontRecDict): Add `maxstack' field.
452 (CFF_Private): Add `subfont' field.
453 (CFF_Font): Add `top_dict_length' and `cff2' fields.
454
455 * src/sfnt/sfobjs.c (sfnt_load_face): Handle `CFF2' table.
456
Werner Lemberg3bd79cc2016-12-15 14:34:57 +01004572016-12-15 Werner Lemberg <wl@gnu.org>
458 Dave Arnold <darnold@adobe.com>
459
460 [truetype] Provide HVAR advance width variation as a service.
461
462 Everything is guarded with TT_CONFIG_OPTION_GX_VAR_SUPPORT.
463
464 * src/truetype/ttdriver.c (tt_service_metrics_variations): Updated.
465
466 * src/truetype/ttgxvar.c (TT_Vary_Apply_Glyph_Deltas): Prevent
467 double adjustment of advance width.
468
469 * src/sfnt/ttmtx.c: Include FT_SERVICE_METRICS_VARIATIONS_H.
470 (tt_face_get_metrics): Apply metrics variations.
471
Dave Arnold41533b92016-12-15 00:00:45 +01004722016-12-15 Dave Arnold <darnold@adobe.com>
Dave Arnold097cd872016-12-15 12:58:26 +0100473 Werner Lemberg <wl@gnu.org>
474
Dave Arnoldaa0c4b42016-12-15 14:04:51 +0100475 [truetype] Provide function to apply `HVAR' advance width variation.
476
Werner Lemberg3bd79cc2016-12-15 14:34:57 +0100477 Everything is guarded with TT_CONFIG_OPTION_GX_VAR_SUPPORT.
478
Dave Arnoldaa0c4b42016-12-15 14:04:51 +0100479 * src/truetype/ttgxvar.c (tt_hadvance_adjust): New function.
480 * src/truetype/ttgxvar.h: Updated.
481
4822016-12-15 Dave Arnold <darnold@adobe.com>
483 Werner Lemberg <wl@gnu.org>
484
Dave Arnold097cd872016-12-15 12:58:26 +0100485 [truetype] Add `HVAR' table parsing.
486
487 Note that this is not complete yet; it only handles advance width
488 variation.
489
490 Activation of the code follows in another commit.
491
Werner Lemberg3bd79cc2016-12-15 14:34:57 +0100492 Everything is guarded with TT_CONFIG_OPTION_GX_VAR_SUPPORT.
493
Dave Arnold097cd872016-12-15 12:58:26 +0100494 * include/freetype/ftmm.h (FT_Var_Named_Style): Add `psid' member.
495
496 * src/truetype/ttgxvar.h (GX_HVarData, GX_AxisCoords, GX_HVarRegion,
497 GX_HVStore, GX_WidthMap): New auxiliary structures for...
498 (GX_HVarTable): ... HVAR main structure.
499 (GX_BlendRec): Add data for HVAR loading.
500
501 * src/truetype/ttgxvar.c (FT_FIXED_ONE, FT_fdot14ToFixed,
502 FT_intToFixed, FT_fixedToInt): New macros.
503 (ft_var_load_hvar): New function.
504 (TT_Get_MM_Var): Updated.
505 (tt_done_blend): Deallocate HVAR data.
506
5072016-12-15 Dave Arnold <darnold@adobe.com>
Dave Arnold010e0612016-12-15 11:22:15 +0100508
Dave Arnoldabd58582016-12-15 12:17:22 +0100509 [cff] Extend number parsing.
510
511 The forthcoming CFF2 support needs a dynamic parsing limit.
512
513 * src/cff/cffparse.c (cff_parse_num, do_fixed, cff_parse_fixed,
514 cff_parse_fixed_scaled, cff_parse_fixed_dynamic): Add argument for
515 parser.
516 (cff_parse_font_matrix, cff_parse_font_bbox, cff_parse_private_dict,
517 cff_parse_multiple_master, cff_parse_cid_ros, cff_parser_run): Updated.
518
519 * src/cff/cffparse.h (cff_parse_num): Export locally.
520
5212016-12-15 Dave Arnold <darnold@adobe.com>
522
Dave Arnold010e0612016-12-15 11:22:15 +0100523 [cff] Implement dynamic stack size for Adobe engine.
524
525 This also adds `cf2_stack_setReal' and `cf2_stack_pop', needed for
526 the forthcoming CFF2 support.
527
528 * src/cff/cf2stack.c (cf2_stack_init): Add argument for stack size.
529 (cf2_stack_free): Deallocate stack.
530 (cf2_stack_count, cf2_stack_pushInt, cf2_stack_pushFixed,
531 cf2_stack_popInt, cf2_stack_popFixed, cf2_stack_getReal,
532 cf2_stack_clear): Updated.
533 (cf2_stack_setReal, cf2_stack_pop): New functions.
534
535 * src/cff/cf2stack.h (CF2_Stack): Add `stackSize' member.
536 Update function declarations.
537
538 * src/cff/cf2intrp.c (cf2_interpT2CharString): Updated.
539
540 * src/cff/cffparse.c (cff_parser_init): Add parameter for stack
541 size; return error code.
542 (cff_parser_done): New function.
543 (cff_parser_run): Updated.
544
545 * src/cff/cffparse.h (CFF_Parser): Add `stackSize' member and make
546 `stack' a pointer.
547 Update function declarations.
548
549 * src/cff/cffload.c (cff_load_private_dict, cff_subfont_load):
550 Updated.
551
5522016-12-15 Dave Arnold <darnold@adobe.com>
Dave Arnold41533b92016-12-15 00:00:45 +0100553 Werner Lemberg <wl@gnu.org>
554
555 [cff] Code shuffling.
556
557 * src/cff/cfftypes.h (CFF_Font): Add `library' and `base_offset'
558 fields.
559
560 * src/cff/cffload.c (cff_subfont_load): Change last argument to
561 `CFF_Font'
562 Split off parsing of private dictionary into...
563 (cff_load_private_dict): ...this new function.
564 (cff_font_load): Updated.
565
Werner Lembergab22b432016-12-14 18:34:55 +01005662016-12-14 Werner Lemberg <wl@gnu.org>
567
Werner Lemberg09183252016-12-14 20:44:11 +0100568 [sfnt, truetype] Add framework for Metrics Variations service.
569
570 No effect yet; service functions will be implemented later on.
571
572 Everything is guarded with TT_CONFIG_OPTION_GX_VAR_SUPPORT.
573
574 * include/freetype/internal/services/svmetric.h: New file.
575
576 * include/freetype/internal/ftserv.h
577 (FT_SERVICE_METRICS_VARIATIONS_H): New macro.
578
579 * include/freetype/internal/tttypes.h (TT_Face): New field `var'.
580
581 * src/sfnt/sfobjs.c: Include FT_SERVICE_METRICS_VARIATIONS_H.
582 (sfnt_init_face): Initialize `face->var'.
583
584 * src/truetype/ttdriver.c: Include FT_SERVICE_METRICS_VARIATIONS_H.
585 (tt_service_metrics_variations): New service.
586 (tt_services): Updated.
587
588 * src/truetype/ttpic.h: Updated.
589
5902016-12-14 Werner Lemberg <wl@gnu.org>
591
Werner Lembergc628a7d2016-12-14 19:31:42 +0100592 [cff] Add Multiple Masters service.
593
594 The code simply uses the MM functions from the `truetype' module.
595
596 Everything is guarded with TT_CONFIG_OPTION_GX_VAR_SUPPORT.
597
598 * include/freetype/internal/tttypes.h (TT_Face): New field `mm'.
599
600 * src/cff/cffdrivr.c: Include FT_SERVICE_MULTIPLE_MASTERS_H.
601 (cff_set_mm_blend, cff_get_mm_blend, cff_get_mm_var,
602 cff_set_var_design, cff_get_var_design): New functions.
603 (cff_service_multi_masters): New service.
604 (cff_services): Updated.
605
606 * src/cff/cffload.c (cff_get_var_blend, cff_done_blend): New
607 functions.
608 * src/cff/cffload.h: Updated.
609
610 * src/cff/cffpic.h (CFF_SERVICE_MULTI_MASTERS_GET): New macro.
611
612 * src/sfnt/sfobjs.c: Include FT_SERVICE_MULTIPLE_MASTERS_H.
613 (sfnt_init_face): Initialize `face->mm'.
614
6152016-12-14 Werner Lemberg <wl@gnu.org>
616
Werner Lemberga7dc0c32016-12-14 18:54:21 +0100617 Extend functionality of `ft_module_get_service'.
618
619 It can now differentiate between local and global searches.
620
621 * src/base/ftobjs.c (ft_module_get_service): Add `global' argument.
622 (FT_Get_TrueType_Engine_Type): Updated.
623
624 * src/cff/cffdrivr.c (cff_get_ps_name, cff_get_cmap_info): Updated.
625
626 * include/freetype/internal/ftobjs.h: Updated.
627 * include/freetype/internal/ftserv.h (FT_FACE_FIND_GLOBAL_SERVICE):
628 Updated.
629
6302016-12-14 Werner Lemberg <wl@gnu.org>
631
Werner Lembergab22b432016-12-14 18:34:55 +0100632 * src/truetype/ttgxvar.c (tt_get_var_blend): Fix compiler warning.
633
Werner Lemberg4e075162016-12-14 18:25:44 +01006342016-12-14 Dave Arnold <darnold@adobe.com>
635 Werner Lemberg <wl@gnu.org>
636
637 [sfnt, cff] Minor preparations.
638
639 * include/freetype/tttags.h (TTAG_CFF2, TTAG_HVAR, TTAG_MVAR,
640 TTAG_VVAR): New SFNT table tags.
641
642 * src/cff/cf2fixed.h (CF2_FIXED_ONE, CF2_FIXED_EPSILON): Add cast.
643
Werner Lemberg27bdb362016-12-10 09:56:03 +01006442016-12-10 Werner Lemberg <wl@gnu.org>
645
Werner Lemberg8b174b42016-12-11 09:16:52 +0100646 [truetype, type1] Add `get_var_blend' to MM service.
647
648 For internal use; we want to share code between the forthcoming CFF2
649 support and TrueType.
650
651 * include/freetype/internal/services/svmm.h (FT_Get_Var_Blend_Func):
652 New typedef.
653 (MultiMasters): Add `get_var_blend'.
654 (FT_Service_MultiMasters): Updated.
655
656 * src/truetype/ttgxvar.c (tt_get_var_blend): New function.
657 * src/truetype/ttgxvar.h: Updated.
658
659 * src/truetype/ttdriver.c (tt_service_gx_multi_masters): Updated.
660 * src/type1/t1driver.c (t1_service_multi_masters): Updated.
661
6622016-12-10 Werner Lemberg <wl@gnu.org>
663
Werner Lemberg27bdb362016-12-10 09:56:03 +0100664 [truetype, type1] Add `done_blend' to MM service.
665
666 For internal use; we want to share code between the forthcoming CFF2
667 support and TrueType.
668
669 * include/freetype/internal/services/svmm.h (FT_Done_Blend_Func):
670 New typedef.
671 (MultiMasters): Add `done_blend'.
672 (FT_Service_MultiMasters): Updated.
673
674 * src/truetype/ttgxvar.c (tt_done_blend): Use `TT_Face' as argument.
675 * src/truetype/ttgxvar.h: Updated.
676
677 * src/truetype/ttobjs.c (TT_Face_Done): Updated.
678
679 * src/truetype/ttdriver.c (tt_service_gx_multi_masters): Updated.
680 * src/type1/t1driver.c (t1_service_multi_masters): Updated.
681
Werner Lemberg3205a442016-12-09 06:55:34 +01006822016-12-09 Werner Lemberg <wl@gnu.org>
683
684 [sfnt] Revert change from 2016-12-08.
685
686 I missed the functionality of `ft_module_get_service', which makes
687 the change unnecessary.
688
Werner Lemberg29aa9572016-12-08 08:59:34 +01006892016-12-08 Werner Lemberg <wl@gnu.org>
690
Werner Lemberg4191b772016-12-08 22:33:46 +0100691 Add framework to support services with 8 functions.
692
693 We will need this for CFF variation font support.
694
695 * include/freetype/internal/ftserv.h (FT_DEFINE_SERVICEDESCREC8):
696 New macro.
697
6982016-12-08 Werner Lemberg <wl@gnu.org>
699
Werner Lemberg29aa9572016-12-08 08:59:34 +0100700 [sfnt] Add `get_glyph_name' and `get_name_index' to SFNT interface.
701
702 CFF2 fonts will need access to those two functions.
703
704 * include/freetype/internal/sfnt.h: Include FT_SERVICE_GLYPH_DICT_H.
705 (SFNT_Interface): Add `get_glyph_name' and `get_name_index' members.
706 (FT_DEFINE_SFNT_INTERFACE): Updated.
707
708 * src/sfnt/sfdriver.c (sfnt_get_glyph_name, sfnt_get_name_index):
709 Fix signatures to exactly correspond to the glyph dict service
710 function typedefs.
711 (sfnt_interface): Updated.
712
Dave Arnoldbcae6572016-12-05 22:08:15 +01007132016-12-06 Dave Arnold <darnold@adobe.com>
714
715 Add `FT_Get_Var_Design_Coordinates' function.
716
717 Note that the low-level functions aren't implemented yet.
718
719 * include/freetype/ftmm.h: Declare.
720
721 * include/freetype/internal/services/svmm.h
722 (FT_Get_Var_Design_Func): New typedef.
723 (MultiMasters): New MM service function `get_var_design'.
724 (FT_DEFINE_SERVICE_MULTIMASTERSREC): Updated.
725 Update all callers.
726
727 * src/base/ftmm.c (FT_Get_Var_Design_Coordinates): Implement.
728
729 * src/truetype/ttdriver.c: Updated.
730
731 * src/truetype/ttgxvar.c (TT_Get_Var_Design): New dummy function to
732 handle `get_var_design' service.
733 * src/truetype/ttgxvar.h: Updated.
734
735 * src/type1/t1driver.c: Updated.
736
737 * src/type1/t1load.c (T1_Get_Var_Design): New dummp function to
738 handle `get_var_design' service.
739 * src/type1/t1load.h: Updated.
740
Werner Lembergc0fae7d2016-12-06 11:13:19 +01007412016-12-06 Werner Lemberg <wl@gnu.org>
742
743 * src/type1/t1load.c (parse_subrs): Fix memory leak.
744
745 The `subrs' keyword might erroneously occur multiple times.
746
747 Reported as
748
749 https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=231
750
Werner Lemberg602be7c2016-12-01 11:36:37 +01007512016-12-01 Werner Lemberg <wl@gnu.org>
752
753 [gzip] Improve building with external zlib (#49673).
754
755 Building FreeType with external zlib 1.2.8 makes msvc 14 stop with
756 the following error.
757
758 ftgzip.c
759 zlib-1.2.8\zlib.h(86): error C2061:
760 syntax error: identifier 'z_const'
761 zlib-1.2.8\zlib.h(94): error C2054:
762 expected '(' to follow 'z_const'
763 zlib-1.2.8\zlib.h(94): error C2085:
764 'msg': not in formal parameter list
765 ...
766 zlib-1.2.8\zlib.h(877): fatal error C1003:
767 error count exceeds 100; stopping compilation
768
769 The error happens because FreeType keeps an own copy of zlib-1.1.4
770 under `src/gzip'. When building `src/gzip/ftgzip.c' with
771 FT_CONFIG_OPTION_SYSTEM_ZLIB defined, it uses
772
773 #include <zlib.h>
774
775 which correctly finds an external `zlib.h', but `zlib.h' itself has
776 a line
777
778 #include "zconf.h"
779
780 which makes Visual Studio 2015 find `src/gzip/zconf.h' while
781 compiling the files in `src/gzip'.
782
783 * src/gzip/zconf.h: Rename to...
784 * src/gzip/ftzconf.h: ... this.
785 * src/gzip/zlib.h, src/gzip/rules.mk (GZIP_DRV_SRCS): Updated.
786
Oleksandr Chekhovskyi255828c2016-12-01 07:07:22 +01007872016-12-01 Oleksandr Chekhovskyi <oleksandr.chekhovskyi@gmail.com>
788
789 [autofit] Fix Emscripten crash (patch #9180).
790
791 Function calls through pointers must use a matching signature to
792 work on Emscripten, since such calls are dispatched through lookup
793 tables grouped by signature.
794
795 * src/autofit/aftypes.h (AF_WritingSystem_ApplyHintsFunc): Fix
796 typedef.
797
Werner Lembergd949a3d2016-11-29 12:09:56 +01007982016-11-29 Werner Lemberg <wl@gnu.org>
799
Werner Lemberg1d28f692016-11-29 18:45:22 +0100800 [smooth] Revert previous commit. Already fixed with 6ca54c64.
801
8022016-11-29 Werner Lemberg <wl@gnu.org>
803
Werner Lembergd949a3d2016-11-29 12:09:56 +0100804 [smooth] Avoid conditional jump on uninitialized value (#49711).
805
806 * src/smooth/ftgrays.c (gray_raster_render): Initialize `worker'.
807
Nikolaus Waxweilerb37b7992016-11-27 16:30:53 +01008082016-11-27 Nikolaus Waxweiler <madigens@gmail.com>
809
810 [autofit] Code shuffling.
811
812 Also improve some comments and remove unused code.
813
814 No functional change.
815
816 * src/autofit/afloader.c (af_loader_load_g): Merged with...
817 (af_loader_load_glyph): ...this function.
818 Split off emboldening code into...
819 (af_loader_embolden_glyph_in_slot): ... this function.
820
Werner Lemberg78150502016-11-17 12:00:20 +01008212016-11-17 Werner Lemberg <wl@gnu.org>
822
823 Better support of LLP64 systems with gcc (and clang).
824
825 * builds/unix/configure.raw: Call `AC_TYPE_LONG_LONG_INT'.
826
827 * builds/unix/ftconfig.in (FT_LONG64): Enable for LLP64 systems (and
828 suppress warnings) even without `FT_CONFIG_OPTION_FORCE_INT64'.
829
Werner Lembergdd26e3d2016-11-10 12:03:32 +01008302016-11-10 Werner Lemberg <wl@gnu.org>
831
832 Fix `lcd_weights' array size.
833
834 * include/freetype/internal/ftobjs.h (FT_LibraryRec): Do it.
835
836 Reported by Nikolaus.
837
Werner Lemberg565db952016-11-06 12:33:51 +01008382016-11-06 Werner Lemberg <wl@gnu.org>
839
Werner Lemberge1ee5472016-11-06 12:39:05 +0100840 * src/base/ftobjs.c (FT_Render_Glyph_Internal): Fix tracing.
841
8422016-11-06 Werner Lemberg <wl@gnu.org>
843
Werner Lemberg1c6fd992016-11-06 12:37:55 +0100844 [sfnt] Improve FT_LOAD_BITMAP_METRICS_ONLY for `sbix' format.
845
846 It's unavoidable to call the PNG engine, but to get the metrics it
847 is sufficient to read the PNG image's header only.
848
849 * src/sfnt/pngshim.c (Load_SBit_Png): Add argument to control the
850 allocation of the glyph slot.
851 * src/sfnt/pngshim.h: Updated.
852 * src/sfnt/ttsbit.c (tt_sbit_decoder_load_png,
853 tt_face_load_sbix_image, tt_face_load_sbit_image): Updated.
854
8552016-11-06 Werner Lemberg <wl@gnu.org>
856
Werner Lemberg565db952016-11-06 12:33:51 +0100857 [sfnt] Speed up `sbix' lookup.
858
859 This also fixes a bug introduced in 2016-10-01 which prevents
860 display of embedded bitmap fonts that use the `sbix' format.
861
862 * src/sfnt/ttsbit.c (tt_face_load_sbit): Store `sbix' size and
863 offset also in `ebdt_size' and `ebdt_start', respectively. This
864 makes the test for an embedded bitmap data table succeed for this
865 format.
866
867 (tt_face_load_strike_metrics) <TT_SBIT_TABLE_TYPE_SBIX>: Use
868 `ebdt_size' and `ebdt_start'
869 (tt_face_load_sbix_image): Ditto.
870
Werner Lemberg37e193e2016-11-06 12:32:51 +01008712016-11-06 Seigo Nonaka <nona@google.com>
872 Werner Lemberg <wl@gnu.org>
873
874 Introduce a way of quickly retrieving (embedded) bitmap metrics.
875
876 `FT_Load_Glyph' doesn't generate a bitmap for a non-bitmap glyph
877 until the user calls `FT_Render_Glyph'. However, it always
878 allocates memory for bitmaps and copies or decodes the contents of a
879 bitmap glyph, which can be quite slow for PNG data.
880
881 * include/freetype/freetype.h (FT_LOAD_BITMAP_METRICS_ONLY): New
882 macro.
883
884 * src/base/ftobjs.c (FT_Load_Glyph): Unset FT_LOAD_RENDER if
885 FT_LOAD_BITMAP_METRICS_ONLY is used.
886
887 * src/sfnt/ttsbit.c (tt_sbit_decoder_alloc_bitmap,
888 tt_sbit_decoder_load_bitmap): Add argument to control allocation of
889 the glyph slot.
890 (tt_sbit_decoder_load_image, tt_sbit_decoder_load_compound,
891 tt_face_load_sbit_image): Updated.
892
893 * src/pcf/pcfdrivr.c (PCF_Glyph_Load): Quickly exit if
894 `FT_LOAD_BITMAP_METRICS_ONLY' is set.
895
896 * src/pfr/pfrsbit.c, src/pfr/pfrsbit.h (pfr_slot_load_bitmap): Add
897 argument to control allocation of the glyph slot.
898 * src/pfr/pfrobjs (pfr_slot_load): Updated.
899
900 * src/winfonts/winfnt.c (FNT_Load_Glyph): Ditto.
901
902 * docs/CHANGES: Updated.
903
9042016-11-06 Werner Lemberg <wl@gnu.org>
Werner Lemberg57f73d12016-11-06 06:06:30 +0100905
906 Synchronize with gnulib (#49448).
907
908 * include/freetype/config/ftconfig.h, builds/unix/ftconfig.in,
909 builds/vms/ftconfig.h (FT_TYPEOF): Update code to use definition in
910 current version of `intprops.h'.
911 Other minor synchronization to reduce code differences between the
912 three files.
913
Behdad Esfahbodb72858c2016-11-03 06:41:00 +01009142016-11-03 Behdad Esfahbod <behdad@behdad.org>
915
916 [truetype] Clamp variation requests to valid range.
917
918 This is required by OpenType 1.8; it also avoids rounding surprises.
919
920 * src/truetype/ttgxvar.c (TT_Set_Var_Design): Clamp design coordinates
921 outside of the allowed range to always stay within the range instead
922 of producing an error.
923
Werner Lemberg328d6842016-10-29 00:18:56 +02009242016-10-29 Werner Lemberg <wl@gnu.org>
925
926 [truetype] Remove clang warnings.
927
928 * src/truetype/ttinterp.h (TT_ExecContextRec): Using `FT_ULong' for
929 loop counter handling.
930
931 * src/truetype/ttinterp.c: Updated.
932 (Ins_SCANTYPE): Use signed constant.
933 (TT_RunIns): Ensure `num_twilight_points' is 16bit.
934
Werner Lembergddf38722016-10-27 07:27:27 +02009352016-10-27 Werner Lemberg <wl@gnu.org>
936
937 [truetype] Fix commit from 2014-11-24.
938
939 Problem reported by Hin-Tak Leung <htl10@users.sourceforge.net>.
940
941 * src/truetype/ttpload.c (tt_face_load_hdmx): Fix file checking
942 logic.
943
Werner Lemberg56140902016-10-26 08:10:59 +02009442016-10-26 Werner Lemberg <wl@gnu.org>
945
Werner Lemberg9c45ac32016-10-26 16:00:00 +0200946 Add `FT_Get_{MM,Var}_Blend_Coordinates' functions.
947
948 * include/freetype/ftmm.h: Declare.
949
950 * include/freetype/internal/services/svmm.h (FT_Get_MM_Blend_Func):
951 New typedef.
952 (MultiMasters): New MM service function `get_mm_blend'.
953 (FT_DEFINE_SERVICE_MULTIMASTERSREC): Updated.
954 Update all callers.
955
956 * src/base/ftmm.c (FT_Get_MM_Blend_Coordinates,
957 FT_Get_Var_Blend_Coordinates): Implement.
958
959 * src/truetype/ttdriver.c: Updated.
960
961 * src/truetype/ttgxvar.c (TT_Get_MM_Blend): New function to handle
962 `get_mm_blend' service.
963 * src/truetype/ttgxvar.h: Updated.
964
965 * src/type1/t1driver.c: Updated.
966
967 * src/type1/t1load.c (T1_Get_MM_Blend): New function to handle
968 `get_mm_blend' service.
969 * src/type1/t1load.h: Updated.
970
971 * docs/CHANGES: Document.
972
9732016-10-26 Werner Lemberg <wl@gnu.org>
974
Werner Lemberg56140902016-10-26 08:10:59 +0200975 * src/type1/t1load.c (parse_subrs): Fix limit check.
976
977 Reported as
978
979 https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=81
980
Alexei Podtelezhnikovc5f1bc42016-10-25 22:31:42 -04009812016-10-25 Alexei Podtelezhnikov <apodtele@gmail.com>
982
983 [cff] Correct cmap format reporting (#24819).
984
985 * src/cff/cffdrivr.c (cff_get_cmap_info): Throw an error on synthetic
986 charmap instead of guessing its format and language.
987
Werner Lemberg57741402016-10-22 18:34:48 +02009882016-10-22 Werner Lemberg <wl@gnu.org>
989
Werner Lemberg50816742016-10-22 19:16:08 +0200990 [truetype] Fix SCANTYPE instruction (#49394).
991
992 * src/truetype/ttinterp.c (Ins_SCANTYPE): Only use lower 16bits.
993
9942016-10-22 Werner Lemberg <wl@gnu.org>
995
Werner Lemberg57741402016-10-22 18:34:48 +0200996 [sfnt] Improve handling of invalid post 2.5 tables [#49393].
997
998 * src/sfnt/ttpost.c (load_format_25): We need at least a single
999 table entry.
1000
Werner Lemberg7eeaf982016-10-14 08:58:17 +020010012016-10-14 Werner Lemberg <wl@gnu.org>
1002
1003 [truetype] Fix handling of `cvar' table data.
1004
1005 Reported as
1006
1007 https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=53
1008
1009 * src/truetype/ttgxvar.c (tt_face_vary_cvt): Ignore invalid CVT
1010 indices.
1011
Werner Lemberg92281222016-10-11 07:12:12 +020010122016-10-11 Werner Lemberg <wl@gnu.org>
1013
Werner Lemberg9c54d122016-10-11 08:57:55 +02001014 [psaux] Fix handling of invalid flex subrs.
1015
1016 Problem reported as
1017
1018 https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=52
1019
1020 * src/psaux/t1decode.c (t1_decoder_parse_charstrings)
1021 <op_callothersubr>: Set `flex_state' after error checking.
1022
10232016-10-11 Werner Lemberg <wl@gnu.org>
1024
Werner Lemberg92281222016-10-11 07:12:12 +02001025 * src/truetype/ttgxvar.c (tt_done_blend): Fix deallocation.
1026
Werner Lembergd61b0422016-10-08 19:20:33 +020010272016-10-08 Werner Lemberg <wl@gnu.org>
1028
Werner Lemberg6b354932016-10-08 20:26:59 +02001029 * src/cid/cidload.c (cid_face_open): Properly propagate `error'.
1030
10312016-10-08 Werner Lemberg <wl@gnu.org>
1032
Werner Lembergd61b0422016-10-08 19:20:33 +02001033 [cid] Fix parsing of subr offsets.
1034
1035 Bug introduced 2016-05-16.
1036
1037 * src/cid/cidparse.c (cid_parser_new): Fix off-by-one error.
1038
Werner Lembergfcc0ee82016-10-01 20:12:25 +020010392016-10-01 Werner Lemberg <wl@gnu.org>
1040
1041 [sfnt] Disable bitmap strikes if we don't have a bitmap data table.
1042
1043 * src/sfnt/ttsbit.c (tt_face_load_sbit): Check whether we have
1044 a bitmap data table.
1045
Alexei Podtelezhnikovb0aacff2016-10-01 12:55:33 -040010462016-10-01 Alexei Podtelezhnikov <apodtele@gmail.com>
1047
1048 [smooth] Remove impossibility.
1049
1050 * src/smooth/ftgrays.c (TWorker): Rearrange fields.
1051 (gray_convert_glyph): Remove impossible condition and clean up.
1052
Werner Lembergbf902392016-09-29 13:04:46 +020010532016-09-29 Werner Lemberg <wl@gnu.org>
1054
Werner Lemberg35764872016-09-30 08:11:52 +02001055 [pcf] Enrich family name with foundry name and glyph width info.
1056
1057 This is a very old patch from openSuSE (from 2006, submitted to
1058 FreeType in 2011) that I forgot to apply.
1059
1060 https://build.opensuse.org/package/view_file/openSUSE:Factory/freetype2/freetype2-bitmap-foundry.patch
1061
1062 Prepend the foundry name plus a space to the family name. There are
1063 many fonts just called `Fixed' which look completely different, and
1064 which have nothing to do with each other. When selecting `Fixed' in
1065 KDE or Gnome one gets results that appear rather random, the style
1066 changes often if one changes the size and one cannot select some
1067 fonts at all.
1068
1069 We also check whether we have `wide' characters; all put together,
1070 we get family names like `Sony Fixed' or `Misc Fixed Wide'.
1071
1072 * src/pcf/pcfread.c (pcf_load_font): Implement it.
1073
1074 * docs/CHANGES: Document it.
1075
10762016-09-29 Werner Lemberg <wl@gnu.org>
1077
Werner Lemberg71b617d2016-09-29 19:53:39 +02001078 [ftfuzzer] Speed up.
1079
1080 * src/tools/ftfuzzer/ftfuzzer.cc (LLVMFuzzerTestOneInput): Don't
1081 check for embedded bitmaps if we have a non-default instance.
1082
10832016-09-29 Werner Lemberg <wl@gnu.org>
1084
Werner Lemberg2067c692016-09-29 19:49:07 +02001085 [truetype] Disallow bitmap strokes for non-default instances.
1086
1087 Also speed up access of default instances if GX variations are
1088 active.
1089
1090 * include/freetype/internal/tttypes.h (TT_FaceRec): Add
1091 `is_default_instance' member.
1092
1093 * src/sfnt/sfobjs.c (sfnt_init_face): Initialize
1094 `is_default_instance'.
1095
1096 * src/truetype/ttgload.c (TT_Process_Simple_Glyph,
1097 load_truetype_glyph): Add test for default instance.
1098 (TT_Load_Glyph): Load embedded bitmaps for default instance only.
1099
1100 * src/truetype/ttgxvar.c (TT_Set_MM_Blend): Compute
1101 `is_default_instance'.
1102
11032016-09-29 Werner Lemberg <wl@gnu.org>
1104
Werner Lembergbf902392016-09-29 13:04:46 +02001105 [truetype] Clean up `TT_Face' structure.
1106
1107 * include/freetype/internal/tttypes.h (TT_FaceRec): Remove unused
1108 fields `horz_metrics' and `vert_metrics'.
1109 Update documentation.
1110
1111 * src/sfnt/sfobjs.c (sfnt_done_face): Updated.
1112
Werner Lemberg2ecf89b2016-09-28 19:06:21 +020011132016-09-28 Werner Lemberg <wl@gnu.org>
1114
Werner Lemberg45cad2e2016-09-28 19:10:52 +02001115 More FT_ZERO usage.
1116
1117 * src/gxvalid/gxvcommn.c (gxv_ClassTable_validate):
1118 s/ft_memset/FT_MEM_ZERO/.
1119
1120 * src/psaux/t1decode.c (t1_decoder_parse_charstrings):
1121 s/ft_memset/FT_ARRAY_ZERO/.
1122
1123 * src/raster/ftraster.c (FT_ZERO): Define.
1124 (ft_black_new): Use it.
1125 * src/raster/ftrend1.c (ft_raster1_get_cbox):
1126 s/FT_MEM_ZERO/FT_ZERO/.
1127
1128 * src/smooth/ftgrays.c (FT_ZERO): Define.
1129 (gray_raster_new): Use it.
1130 * src/smooth/ftsmooth.c (ft_smooth_get_cbox):
1131 s/FT_MEM_ZERO/FT_ZERO/.
1132
11332016-09-28 Werner Lemberg <wl@gnu.org>
1134
Werner Lemberg2ecf89b2016-09-28 19:06:21 +02001135 */*: s/FT_MEM_ZERO/FT_ZERO/ where appropriate.
1136
Werner Lemberg0d945922016-09-27 08:44:31 +020011372016-09-27 Werner Lemberg <wl@gnu.org>
1138
Werner Lemberga3e2c832016-09-27 21:42:02 +02001139 [truetype] Trace number of executed opcodes.
1140
1141 * src/truetype/ttinterp.c (TT_RunIns): Implement it.
1142
11432016-09-27 Werner Lemberg <wl@gnu.org>
1144
Werner Lemberge27b8a52016-09-27 21:21:01 +02001145 [truetype] Speed up `TT_Load_Glyph'.
1146
1147 This avoids additional calls to `tt_face_lookup_table' for the
1148 `glyf' table, which can be expensive.
1149
1150 * include/freetype/internal/tttypes.h (TT_LoaderRec): Move
1151 `glyf_offset' field to ...
1152 (TT_FaceRec): ... this structure.
1153 * src/truetype/ttgload.c (load_truetype_glyph): Updated.
1154 (tt_loader_init): Move initialization of `glyf_offset' to ...
Werner Lemberga3e2c832016-09-27 21:42:02 +02001155 * src/truetype/ttpload.c (tt_face_load_loca): ... this function.
Werner Lemberge27b8a52016-09-27 21:21:01 +02001156
11572016-09-27 Werner Lemberg <wl@gnu.org>
1158
Werner Lemberg0d945922016-09-27 08:44:31 +02001159 [truetype] Introduce dynamic limits for some bytecode opcodes.
1160
1161 This speeds up FreeType's handling of malformed fonts.
1162
1163 * src/truetype/ttinterp.c (TT_RunIns): Set up limits for the number
1164 of twilight points, the total number of negative jumps, and the
1165 total number of loops in LOOPCALL opcodes. The values are based on
1166 the number of points and entries in the CVT table.
1167 (Ins_JMPR): Test negative jump counter.
1168 (Ins_LOOPCALL): Test loopcall counter.
1169
1170 * src/truetype/ttinterp.h (TT_ExecContext): Updated.
1171
1172 * docs/CHANGES: Updated.
1173
Werner Lembergd11e8b62016-09-25 15:32:04 +020011742016-09-25 Werner Lemberg <wl@gnu.org>
1175
Werner Lemberga7649632016-09-25 16:29:05 +02001176 [truetype] Sanitize only last entry of `loca' table.
1177
1178 Without this patch, a loca sequence like `0 100000 0 100000 ...',
1179 where value 100000 is larger than the `glyf' table size, makes
1180 FreeType handle the whole `glyf' table as a single glyph again and
1181 again, which is certainly invalid (and can be very slow, too).
1182
1183 * src/truetype/ttpload.c (tt_face_get_location): Implement.
1184 Improve tracing messages.
1185
11862016-09-25 Werner Lemberg <wl@gnu.org>
1187
Werner Lembergd11e8b62016-09-25 15:32:04 +02001188 * src/tools/ftfuzzer/ftfuzzer.cc (LLVMFuzzerTestOneInput): Fix typo.
1189
Werner Lemberg2f2e73c2016-09-24 22:42:58 +020011902016-09-24 Werner Lemberg <wl@gnu.org>
1191
1192 [autofit] Tracing fixes.
1193
1194 * src/autofit/afmodule.c (af_autofitter_load_glyph): Call dumping
1195 functions only if we actually do tracing.
1196
Alexei Podtelezhnikov53ae7a52016-09-22 22:48:15 -040011972016-09-22 Alexei Podtelezhnikov <apodtele@gmail.com>
1198
1199 [smooth] Reduce divisions in the line renderer.
1200
1201 We don't need some divisions if a line segments stays within a single
1202 row or a single column of pixels.
1203
1204 * src/smooth/ftgrays.c (gray_render_line) [FT_LONG64]: Make divisions
1205 conditional.
1206
Alexei Podtelezhnikovd5f75332016-09-15 00:13:36 -040012072016-09-15 Alexei Podtelezhnikov <apodtele@gmail.com>
1208
1209 * src/smooth/ftgrays.c (gray_sweep): Remove check for empty table.
1210
Alexei Podtelezhnikovad475502016-09-14 23:15:03 -040012112016-09-14 Alexei Podtelezhnikov <apodtele@gmail.com>
1212
1213 [smooth] Another tiny speed-up.
1214
1215 * src/smooth/ftgrays.c (gray_find_cell): Merge into...
1216 (gray_record_cell): ... this function.
1217
Alexei Podtelezhnikov6ca54c62016-09-11 16:00:52 -040012182016-09-11 Alexei Podtelezhnikov <apodtele@gmail.com>
1219
Alexei Podtelezhnikovc38be522016-09-11 22:44:44 -04001220 * src/smooth/ftgrays.c (gray_{find,set}_cell): Remove dubious code.
1221
12222016-09-11 Alexei Podtelezhnikov <apodtele@gmail.com>
1223
Alexei Podtelezhnikov6ca54c62016-09-11 16:00:52 -04001224 [smooth] Fix valgrind warning and reoptimize.
1225
1226 The algorithm calls `gray_set_cell' at the start of each new contour
1227 or when the contours cross the cell boundaries. Double-checking for
1228 that is wasteful.
1229
1230 * src/smooth/ftgrays.c (gray_set_cell): Remove check for a new cell.
1231 (gray_convert_glyph): Remove initialization introduced by 44b172e88.
1232
Werner Lemberge421a0b2016-09-10 08:02:30 +020012332016-09-10 Werner Lemberg <wl@gnu.org>
1234
1235 [sfnt] Fix previous commit.
1236
1237 Problems reported as
1238
1239 https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=40
1240
1241 We now map the strike index right before accessing the physical
1242 data, not earlier.
1243
1244 * src/sfnt/sfobjs.c (sfnt_load_face): Set `face->sbit_strike_map'
1245 after creating the map so that...
1246
1247 * src/sfnt/ttsbit.c (tt_face_load_strike_metrics): ... this function
1248 can be used before and after setting up `sbit_strike_map'.
1249 (tt_face_set_sbit_strike): Revert change.
1250 (tt_sbit_decoder_init, tt_face_load_sbix_image): Map strike index.
1251
1252 * src/truetype/ttdriver.c (tt_size_select): Revert change.
1253
Werner Lembergd609b7c2016-09-09 22:11:07 +020012542016-09-09 Werner Lemberg <wl@gnu.org>
1255
Werner Lembergdeb26152016-09-09 22:13:33 +02001256 [ftfuzzer] Minor improvements.
1257
1258 * src/tools/ftfuzzer/ftfuzzer.cc (LLVMFuzzerTestOneInput): Ignore
1259 invalid strikes.
1260 Use better values for call to `FT_Set_Char_Size'.
1261
12622016-09-09 Werner Lemberg <wl@gnu.org>
1263
Werner Lembergd609b7c2016-09-09 22:11:07 +02001264 [sfnt] Don't provide (completely) broken strike data.
1265
1266 FreeType tries to sanitize strike header data; we now reject
1267 completely broken ones.
1268
1269 * include/freetype/internal/tttypes.h (TT_FaceRec): New
1270 `sbit_strike_map' array pointer.
1271
1272 * src/base/ftobjs.c (FT_Match_Size): Reject matches where either
1273 width or height would be zero.
1274 Add tracing message in case of error.
1275
1276 * src/sfnt/sfobjs.c (sfnt_load_face): Populate `sbit_strike_map',
1277 only using (more or less) valid strike header data for
1278 FT_Face's `available_sizes' array.
1279 (sfnt_done_face): Updated.
1280
1281 * src/sfnt/ttsbit.c (tt_face_set_sbit_strike): Use
1282 `sbit_strike_map'.
1283 (tt_face_load_strike_metrics): Improve tracing.
1284
1285 * src/truetype/ttdriver.c (tt_size_select): Use `sbit_strike_map'.
1286
Werner Lemberg9749f262016-09-08 07:51:03 +020012872016-09-08 Werner Lemberg <wl@gnu.org>
1288
Werner Lembergd2d59682016-09-08 09:04:32 +02001289 * Version 2.7 released.
1290 =======================
1291
1292
1293 Tag sources with `VER-2-7'.
1294
1295 * docs/VERSION.TXT: Add entry for version 2.7.
1296
1297 * README, Jamfile (RefDoc), builds/windows/vc2005/freetype.vcproj,
1298 builds/windows/vc2005/index.html,
1299 builds/windows/vc2008/freetype.vcproj,
1300 builds/windows/vc2008/index.html,
1301 builds/windows/vc2010/freetype.vcxproj,
1302 builds/windows/vc2010/index.html,
1303 builds/windows/visualc/freetype.dsp,
1304 builds/windows/visualc/freetype.vcproj,
1305 builds/windows/visualc/index.html,
1306 builds/windows/visualce/freetype.dsp,
1307 builds/windows/visualce/freetype.vcproj,
1308 builds/windows/visualce/index.html,
1309 builds/wince/vc2005-ce/freetype.vcproj,
1310 builds/wince/vc2005-ce/index.html,
1311 builds/wince/vc2008-ce/freetype.vcproj,
1312 builds/wince/vc2008-ce/index.html: s/2.6.5/2.7/, s/265/27/.
1313
1314 * include/freetype/freetype.h (FREETYPE_MINOR): Set to 7.
1315 (FREETYPE_PATCH): Set to 0.
1316
1317 * builds/unix/configure.raw (version_info): Set to 18:6:12.
1318 * CMakeLists.txt (VERSION_MINOR): Set to 7.
1319 (VERSION_PATCH): Set to 0.
1320
1321 * docs/CHANGES: Updated.
1322
13232016-09-08 Werner Lemberg <wl@gnu.org>
1324
Werner Lembergb1e7b682016-09-08 08:56:34 +02001325 * src/truetype/ttinterp.c: Include `ttgxvar.h'.
1326
1327 This fixes the `multi' build.
1328
13292016-09-08 Werner Lemberg <wl@gnu.org>
1330
Werner Lemberg9749f262016-09-08 07:51:03 +02001331 [autofit] Another improvement to Armenian support.
1332
1333 Suggested by Hrant H Papazian <hpapazian@gmail.com>.
1334
1335 * src/autofit/afscript.h: Use better suited characters to derive
1336 default stem widths.
1337
Alexei Podtelezhnikova0b92bc2016-09-07 23:19:57 -040013382016-09-07 Alexei Podtelezhnikov <apodtele@gmail.com>
1339
1340 * src/smooth/ftgrays.c (gray_hline): Microptimize.
1341
Alexei Podtelezhnikov44b172e2016-09-06 23:24:17 -040013422016-09-06 Alexei Podtelezhnikov <apodtele@gmail.com>
1343
Alexei Podtelezhnikov9d0a3bd2016-09-06 23:59:33 -04001344 [smooth] Operate in absolute bitmap coordinates.
1345
1346 Simpler bitmap addressing improves performance by 1.5%.
1347
1348 * src/smooth/ftgrays.c (gray_TWorker): Remove count fields.
1349 (gray_dump_cells, gray_find_cell, gray_set_cell, gray_hline,
1350 gray_sweep, gray_convert_glyph, gray_raster_render): Updated.
1351
13522016-09-06 Alexei Podtelezhnikov <apodtele@gmail.com>
1353
Alexei Podtelezhnikov44b172e2016-09-06 23:24:17 -04001354 [smooth] Improve contour start (take 2).
1355
1356 * src/smooth/ftgrays.c (gray_move_to): Call `gray_set_cell' directly
1357 instead of...
1358 (gray_start_cell): ... this function, which is removed.
1359 (gray_convert_glyph): Make initial y-coordinate invalid.
1360
Werner Lembergebbb8b22016-09-06 16:28:57 +020013612016-09-06 Werner Lemberg <wl@gnu.org>
1362
1363 [type1] MM fonts support exactly zero named instances (#48748).
1364
1365 * src/type1/t1load.c (T1_Get_MM_Var): Set `num_namedstyles' to zero.
1366
Jonathan Kewa15133e2016-09-06 06:33:36 +020013672016-09-06 Jonathan Kew <jfkthame@gmail.com>
1368
1369 [cff] Fix uninitialized memory.
1370
1371 Problem reported as
1372
1373 https://bugzilla.mozilla.org/show_bug.cgi?id=1270288
1374
1375 * src/cff/cf2interp.c (cf2_interpT2CharString): Initialize `storage'
1376 array to handle a `get' opcode without a previous `put'.
1377
Alexei Podtelezhnikov7effc272016-09-05 21:58:56 -040013782016-09-05 Alexei Podtelezhnikov <apodtele@gmail.com>
1379
Alexei Podtelezhnikov9773d5f2016-09-05 23:33:35 -04001380 * src/smooth/ftgrays.c (gray_move_to, gray_start_cell): Revert.
1381
13822016-09-05 Alexei Podtelezhnikov <apodtele@gmail.com>
1383
Alexei Podtelezhnikov7effc272016-09-05 21:58:56 -04001384 [smooth] Improve contour start.
1385
1386 * src/smooth/ftgrays.c (gray_move_to): Call `gray_set_cell' directly
1387 instead of...
1388 (gray_start_cell): ... this function, which is removed.
1389
Werner Lembergc9adf1a2016-09-05 07:32:37 +020013902016-09-05 Werner Lemberg <wl@gnu.org>
1391
Werner Lemberg3ebfe3c2016-09-05 10:55:07 +02001392 [cff] Fix memory initialization.
1393
1394 * src/cff/cf2stack.c (cf2_stack_init): Use `FT_NEW'. The `Q'
1395 variants of FreeType's memory allocation macros don't do zeroing.
1396
13972016-09-05 Werner Lemberg <wl@gnu.org>
1398
Werner Lemberg1c8bb632016-09-05 08:13:42 +02001399 [ftrandom] Minor improvements.
1400
1401 * src/tools/ftrandom/ftrandom.c (_XOPEN_SOURCE): New macro, set to
1402 500.
1403
1404 * src/tools/ftrandom/Makefile (CFLAGS): Split off include
1405 directories to ...
1406 (INCLUDES): ... this new variable.
1407 (LDFLAGS): New variable.
1408 (ftrandom.o, ftrandom): Updated.
1409
14102016-09-05 Werner Lemberg <wl@gnu.org>
1411
Werner Lembergc9adf1a2016-09-05 07:32:37 +02001412 [autofit] Improve Armenian support.
1413
1414 Thanks to Hrant H Papazian <hpapazian@gmail.com> for help.
1415
1416 * src/autofit/afblue.dat (AF_BLUE_STRING_ARMENIAN_*): Improve
1417 selection of characters.
1418
1419 * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
1420
Werner Lemberg4b28f6a2016-09-04 19:05:45 +020014212016-09-04 Werner Lemberg <wl@gnu.org>
1422
1423 [ftrandom] Improve Makefile.
1424
1425 It now supports both a normal build (`./configure && make') and a
1426 development build (`make devel').
1427
1428 * src/tools/ftrandom/Makefile (VPATH): Set it so that
1429 `libfreetype.a' gets searched in both `objs' (for the development
1430 build) and `objs/.libs' (for a normal build which uses libtool).
1431 (LIBS): Add missing libraries.
1432 (ftrandom.o): New rule.
1433 (ftrandom): Use automatic variables.
1434
Werner Lembergf0fa7a62016-09-03 06:33:36 +020014352016-09-03 Werner Lemberg <wl@gnu.org>
1436
Werner Lemberg4e659d72016-09-03 18:14:00 +02001437 [truetype] More fixes for handling of GX deltas.
1438
1439 Problems reported by Bob Taylor <Bob.Taylor@monotype.com>.
1440
1441 * src/truetype/ttgxvar.c (TT_Vary_Apply_Glyph_Deltas): Fix rough
1442 sanity test for glyph variation array header size.
1443 Always set stream position before reading packed x and y deltas.
1444 Fix thinko w.r.t. `localpoints' array.
1445
14462016-09-03 Werner Lemberg <wl@gnu.org>
1447
Werner Lembergca8e98d2016-09-03 13:06:16 +02001448 [ftrandom] Various fixes.
1449
1450 * src/tools/ftrandom/ftrandom.c (GOOD_FONTS_DIR): Provide better
1451 default.
1452 (error_fraction): Make it of type `double' to work as advertized –
1453 this was completely broken.
1454 Update all related code.
1455 (error_count, fcnt): Make it unsigned to fix compiler warnings.
1456 Update all related code.
1457 (fontlist): Change `len' member to `long' to fix compiler warnings.
1458 (FT_MoveTo, FT_LineTo, FT_ConicTo, FT_CubicTo, abort_test): Tag
1459 unused variables.
1460 (TestFace, FindFonts, copyfont, do_test): Fix compiler warnings.
1461 (ExecuteTest): Ditto.
1462 Call `FT_Done_FreeType'.
1463 (getErrorCnt): Replace `ceil' with an ordinary cast to `unsigned
1464 int'.
1465 (usage): Improve output.
1466 (main): Fix compiler warnings.
1467
1468 * src/tools/ftrandom/README: Updated.
1469
14702016-09-03 Werner Lemberg <wl@gnu.org>
1471
Werner Lembergb98dfda2016-09-03 08:20:31 +02001472 [base] Avoid negative bitmap stroke dimensions (#48985).
1473
1474 * src/base/ftobjs.c (FT_Open_Face): Check whether negation was
1475 actually successful. For example, this can fail for value
1476 -32768 if the type is `signed short'. If there are problems,
1477 disable the stroke.
1478
14792016-09-03 Werner Lemberg <wl@gnu.org>
1480
Werner Lembergf0fa7a62016-09-03 06:33:36 +02001481 [cff] Avoid null pointer passed to FT_MEM_COPY (#48984).
1482
1483 * src/cff/cffload.c (cff_index_get_name): Check `byte_len'.
1484
Werner Lembergd8ef7262016-09-02 23:27:50 +020014852016-09-02 Werner Lemberg <wl@gnu.org>
1486
Werner Lembergd87bb912016-09-02 23:56:27 +02001487 [unix] Enable 64bit support in file system access (#48962).
1488
1489 * builds/unix/configure.raw: Call `AC_SYS_LARGEFILE'.
1490
14912016-09-02 Werner Lemberg <wl@gnu.org>
1492
Werner Lembergd8ef7262016-09-02 23:27:50 +02001493 [sfnt] Avoid left shift of negative value (#48980).
1494
1495 * src/sfnt/ttsbit.c (tt_sbit_decoder_load_bit_aligned): Use unsigned
1496 constant.
1497
14982016-09-02 Werner Lemberg <wl@gnu.org>
Werner Lemberg16583cc2016-09-02 22:45:14 +02001499
1500 * src/smooth/ftgrays.c (gray_hline): Fix clang compiler warnings.
1501
Werner Lemberg7a13dc02016-09-02 08:24:01 +020015022016-09-02 Werner Lemberg <wl@gnu.org>
1503
1504 Some preparations for the next release.
1505
1506 * include/freetype/config/ftoption.h
1507 (TT_CONFIG_OPTION_SUBPIXEL_HINTING): Enable.
1508
1509 * docs/CHANGES: Updated.
1510
Alexei Podtelezhnikov11d33362016-09-01 22:56:24 -040015112016-09-01 Alexei Podtelezhnikov <apodtele@gmail.com>
1512
1513 [smooth] Simplify span rendering more.
1514
1515 It turns out that there is significant cost associated with `FT_Span'
1516 creation and calls to `gray_render_span' because it happerns so
1517 frequently. This removes these steps from our internal use but leaves
1518 it alone for `FT_RASTER_FLAG_DIRECT" to preserve API. The speed gain
1519 is about 5%.
1520
1521 * src/smooth/ftgrays.c (gray_render_span): Removed. The code is
1522 migrated to...
1523 (gray_hline): ... here.
1524
Alexei Podtelezhnikovf44ddfd2016-08-30 23:21:23 -040015252016-08-30 Alexei Podtelezhnikov <apodtele@gmail.com>
1526
1527 [smooth] Streamline pixmap drawing a bit more.
1528
1529 Zero coverage is unlikely (1 out of 256) to warrant checking. This
Alexei Podtelezhnikov11d33362016-09-01 22:56:24 -04001530 gives 0.5% speed improvement in rendering simple glyphs.
Alexei Podtelezhnikovf44ddfd2016-08-30 23:21:23 -04001531
1532 * src/smooth/ftgrays.c (gray_hline, gray_render_span): Remove checks.
1533
Alexei Podtelezhnikove73055c2016-08-29 23:15:35 -040015342016-08-29 Alexei Podtelezhnikov <apodtele@gmail.com>
1535
1536 [smooth] Streamline pixmap drawing.
1537
1538 This gives 2% speed improvement in rendering simple glyphs.
1539
1540 * src/smooth/ftgrays.c (TPixmap): Reduced pixmap descriptor with a
1541 pointer to its bottom-left and pitch to be used in...
1542 (gray_TWorker): ... here.
1543 (gray_render_span): Move pixmap flow check from here...
1544 (gray_raster_render): .. to here.
1545
Alexei Podtelezhnikov4d3f7ca2016-08-27 23:25:54 -040015462016-08-27 Alexei Podtelezhnikov <apodtele@gmail.com>
1547
1548 [smooth] Reduce stack of band boundaries.
1549
1550 * src/smooth/ftgrays.c (gray_TBand): Removed.
1551 (gray_convert_glyph): Updated to stack band boundaries concisely.
1552
Werner Lembergf3e71ba2016-08-26 10:31:30 +020015532016-08-26 Werner Lemberg <wl@gnu.org>
1554
Werner Lemberg57aa8392016-08-26 11:59:50 +02001555 * src/cid/cidload.c (cid_face_open): Improve handling of `SDBytes'.
1556
15572016-08-26 Werner Lemberg <wl@gnu.org>
1558
Werner Lemberg3c61a2f2016-08-26 11:50:09 +02001559 [cid] Fix commit from 2016-05-16.
1560
1561 * src/cid/cidparse.c (cid_parser_new): Fix off-by-one errors.
1562
15632016-08-26 Werner Lemberg <wl@gnu.org>
1564
Werner Lembergf3e71ba2016-08-26 10:31:30 +02001565 [sfnt] Cache offset and size to bitmap data table.
1566
1567 This commit avoids `EBDT' and friends being looked up again and
1568 again while loading a single embedded bitmap.
1569
1570 * include/freetype/internal/tttypes.h (TT_FaceRec)
1571 [TT_CONFIG_OPTION_EMBEDDED_BITMAPS]: New fields `ebdt_start' and
1572 `ebdt_size'.
1573
1574 * src/sfnt/ttsbit.c (tt_sbit_decoder_init): Move table lookup to ...
1575 (tt_face_load_sbit): ... this function; also store the table size
1576 and offset.
1577
Alexei Podtelezhnikov9a444f02016-08-25 22:36:01 -040015782016-08-26 Alexei Podtelezhnikov <apodtele@gmail.com>
1579
1580 * src/smooth/ftgrays.c (gray_raster_render): Minor tweaks.
1581
Werner Lemberga660e3d2016-08-26 00:23:27 +020015822016-08-26 Werner Lemberg <wl@gnu.org>
1583
1584 [type1] Fix heap buffer overflow.
1585
1586 Reported as
1587
1588 https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=36
1589
1590 * src/type1/t1load.c (parse_charstrings): Reject fonts that don't
1591 contain glyph names.
1592
Werner Lemberg327f2e32016-08-25 12:46:08 +020015932016-08-25 Werner Lemberg <wl@gnu.org>
1594
Werner Lemberg69ce9732016-08-25 19:49:52 +02001595 [sfnt] Fix previous commit (#48901).
1596
1597 * src/sfnt/ttcmap.c (tt_cmap4_char_map_binary): Thinkos.
1598
15992016-08-25 Werner Lemberg <wl@gnu.org>
1600
Werner Lembergacd18792016-08-25 17:12:46 +02001601 [sfnt] Speed up handling of invalid format 4 cmaps.
1602
1603 * src/sfnt/ttcmap.c (tt_cmap4_next, tt_cmap4_char_map_binary): Add
1604 tests for `num_glyph' from `tt_cmap4_char_map_linear'.
1605
16062016-08-25 Werner Lemberg <wl@gnu.org>
1607
Werner Lemberg327f2e32016-08-25 12:46:08 +02001608 * include/freetype/internal/ftdriver.h: Remove unused typedefs.
1609
Alexei Podtelezhnikovcb438872016-08-22 23:06:45 -040016102016-08-22 Alexei Podtelezhnikov <apodtele@gmail.com>
1611
1612 [smooth] Simplify span rendering.
1613
1614 This removes unnecessary complexity of span merging and buffering.
1615 Instead, the spans are rendered as they come, speeding up the
Alexei Podtelezhnikov9a444f02016-08-25 22:36:01 -04001616 rendering by about 5% as a result.
Alexei Podtelezhnikovcb438872016-08-22 23:06:45 -04001617
1618 * src/smooth/ftgrays.c [FT_MAX_GRAY_SPANS]: Macro removed.
1619 (gray_TWorker): Remove span buffer and related fields.
1620 (gray_sweep, gray_hline): Updated.
1621
1622 * include/freetype/ftimage.h: Remove documentation note about
1623 `FT_MAX_GRAY_SPANS', which was never in `ftoption.h' and is now gone.
1624
Werner Lembergcf4224a2016-08-16 06:44:23 +020016252016-08-16 Werner Lemberg <wl@gnu.org>
1626
Werner Lemberga4c2a312016-08-22 19:32:34 +02001627 [truetype] Fix `MPS' instruction.
1628
1629 According to Greg Hitchcock, MPS in DWrite really returns the point
1630 size.
1631
1632 * src/truetype/ttobjs.h (TT_SizeRec): Add `point_size' member.
1633
1634 * src/truetype/ttdriver.c (tt_size_request): Set `point_size'.
1635
1636 * src/truetype/ttinterp.h (TT_ExecContextRec): Add `pointSize'
1637 member.
1638
1639 * src/truetype/ttinterp.c (TT_Load_Context): Updated.
1640 (Ins_MPS): Fix instruction.
1641
16422016-08-16 Werner Lemberg <wl@gnu.org>
1643
Werner Lemberg8521ad92016-08-16 13:44:38 +02001644 [lzw] Optimize last commit.
1645
1646 * src/lzw/ftzopen.c (ft_lzwstate_get_code): Move check into
1647 conditional clause.
1648
16492016-08-16 Werner Lemberg <wl@gnu.org>
1650
Werner Lemberg548f68d2016-08-16 09:46:40 +02001651 [lzw] Avoid invalid left shift.
1652
Werner Lemberg6df68332016-08-16 09:50:07 +02001653 Reported as
1654
1655 https://bugzilla.mozilla.org/show_bug.cgi?id=1295366
1656
Werner Lemberg548f68d2016-08-16 09:46:40 +02001657 * src/lzw/ftzopen.c (ft_lzwstate_get_code): Limit `num_bits'.
1658
16592016-08-16 Werner Lemberg <wl@gnu.org>
1660
Werner Lemberg8d7b9192016-08-16 08:07:58 +02001661 [lzw] Avoid buffer overrun.
1662
1663 Reported as
1664
1665 https://bugzilla.mozilla.org/show_bug.cgi?id=1273283
1666
1667 * src/lzw/ftzopen.c (ft_lzwstate_refill): Ensure `buf_size' doesn't
1668 underflow.
1669
16702016-08-16 Werner Lemberg <wl@gnu.org>
1671
Werner Lembergcf4224a2016-08-16 06:44:23 +02001672 [truetype] Fix compiler warning.
1673
1674 * src/truetype/ttgload.c (load_truetype_glyph): Add cast.
1675
Werner Lemberg248f5622016-08-13 06:53:53 +020016762016-08-13 Werner Lemberg <wl@gnu.org>
1677
1678 [winfonts] Avoid zero bitmap width and height.
1679
1680 Reported as
1681
1682 https://bugzilla.mozilla.org/show_bug.cgi?id=1272173
1683
1684 * src/winfonts/winfnt.c (FNT_Face_Init): Check zero pixel height.
1685 (FNT_Load_Glyph): Check for zero pitch.
1686
Alexei Podtelezhnikovdce554b2016-08-11 07:29:19 +020016872016-08-11 Alexei Podtelezhnikov <apodtele@gmail.com>
1688
Alexei Podtelezhnikov125f2b62016-08-11 23:40:05 -04001689 * src/truetype/ttinterp.c (Pop_Push_Count): Revert changes.
1690
16912016-08-11 Alexei Podtelezhnikov <apodtele@gmail.com>
1692
Alexei Podtelezhnikov49d474f2016-08-11 23:03:09 -04001693 * src/truetype/ttinterp.c (TT_RunIns): Minor and formatting.
1694
16952016-08-11 Alexei Podtelezhnikov <apodtele@gmail.com>
1696
Alexei Podtelezhnikovdce554b2016-08-11 07:29:19 +02001697 * src/truetype/ttinterp.c (Pop_Push_Count): Fix some entries.
1698
Peter Klotz3b37bfc2016-08-10 22:38:08 -040016992016-08-10 Peter Klotz <Peter.Klotz@ith-icoserve.com>
1700
1701 * src/smooth/ftgrays.c (gray_hline): Fix uninitialized access.
1702
Werner Lemberg5224aae2016-08-10 19:47:29 +020017032016-08-10 Werner Lemberg <wl@gnu.org>
1704
1705 [sfnt] Use correct type for `italicAngle' field (#48732).
1706
1707 * src/sfnt/ttload.c (tt_face_load_post): Fix types.
1708
Werner Lemberg53059f92016-08-07 09:01:33 +020017092016-08-06 Jon Spencer <jon@jonspencer.ca>
1710
1711 [sfnt] Fix `FT_Get_Advance' for bitmap strikes.
1712
1713 `FT_Get_Advance' returns 0 for bitmap fonts. It first gets the
1714 advance value from the font table and then scales it by the
1715 `font->size->metrics->x_scale' field. But `FT_Select_Size' doesn't
1716 set that value for bitmap fonts and the advance gets scaled to zero.
1717
1718 Taken from
1719
1720 https://github.com/behdad/harfbuzz/issues/252
1721
1722 * src/sfnt/ttsbit.c (tt_face_load_strike_metrics)
1723 <TT_SBIT_TABLE_TYPE_EBLC>: Set scale values.
1724
17252016-08-06 Behdad Esfahbod <behdad@behdad.org>
Behdad Esfahbod8183eeb2016-08-06 23:12:55 +02001726
1727 [truetype] Fix GX variation handling of composites.
1728
1729 * src/truetype/ttgload.c (load_truetype_glyph)
1730 [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Check `ARGS_ARE_XY_VALUES' flag.
1731
Alexei Podtelezhnikov97718f32016-08-05 23:36:16 -040017322016-08-05 Alexei Podtelezhnikov <apodtele@gmail.com>
1733
1734 [smooth] Minor refactoring.
1735
1736 * src/smooth/ftgrays.c (gray_render_scanline, gray_render_line):
1737 Updated.
1738
Werner Lembergfae4ec02016-07-29 06:43:32 +020017392016-07-29 Werner Lemberg <wl@gnu.org>
1740
1741 [sfnt, truetype] Don't abort on invalid `maxComponentDepth'.
1742
1743 Since 2016-05-16 we detect infinite recursion directly.
1744
1745 * src/sfnt/ttload.c (tt_face_load_maxp): Don't adjust
1746 `maxComponentDepth'.
1747 * src/truetype/ttgload.c (load_truetype_glyph): Don't abort if
1748 `maxComponentDepth' is not valid. Instead, simply adjust its value
1749 and emit a tracing message.
1750
Werner Lembergd9c7f5a2016-07-26 20:20:27 +020017512016-07-26 Werner Lemberg <wl@gnu.org>
1752
1753 * src/autofit/aflatin.c (af_latin_metrics_scale_dim): Minor.
1754
1755 No functional change.
1756
Hin-Tak Leung3a528bb2016-07-22 06:59:36 +020017572016-07-22 Hin-Tak Leung <htl10@users.sourceforge.net>
1758
1759 [truetype] Record the end of IDEFs.
1760
1761 To match the logic in FDEF. The value of the end is only used for
1762 bound-checking in `Ins_JMPR', so it may not have been obvious that
1763 it was not recorded. Tested (as part of Font Validator 2.0) all the
1764 fonts on Fedora and did not see any change.
1765
1766 * src/truetype/ttinterp.c (Ins_IDEF): Updated.
1767
Werner Lemberge69f34b2016-07-19 07:06:19 +020017682016-07-19 Werner Lemberg <wl@gnu.org>
1769
Werner Lemberg7f631052016-07-19 21:35:58 +02001770 [truetype] Sanitizer fix, second try.
1771
1772 * src/truetype/ttgxvar.c (ft_var_readpackedpoints): Fix boundary
1773 tests and use only one slot more.
1774
17752016-07-19 Werner Lemberg <wl@gnu.org>
1776
Werner Lemberge69f34b2016-07-19 07:06:19 +02001777 [truetype] Sanitizer fix.
1778
1779 * src/truetype/ttgxvar.c (ft_var_readpackedpoints): Increase array
1780 to fix nested loops.
1781
Werner Lemberga3b70d72016-07-18 06:23:36 +020017822016-07-18 Werner Lemberg <wl@gnu.org>
1783
1784 [truetype] Make GETDATA work only for GX fonts.
1785
1786 * src/truetype/ttinterp.c (opcode_name): Updated.
1787 (Ins_GETDATA): Only define for `TT_CONFIG_OPTION_GX_VAR_SUPPORT'.
1788 (TT_RunIns): Updated.
1789
17902016-07-17 Werner Lemberg <wl@gnu.org>
Werner Lemberg32a32062016-07-16 16:39:26 +02001791
Werner Lemberg8c930132016-07-17 22:40:31 +02001792 [truetype] Add support for Apple's
1793
1794 GETDATA[], opcode 0x92
1795
1796 bytecode instruction. It always returns 17, and we have absolutely
1797 no idea what it is good for...
1798
1799 * src/truetype/ttinterp.c (Pop_Push_Count, opcode_name): Updated.
1800 (Ins_GETDATA): New function.
1801 (TT_RunIns): Add it.
1802
18032016-07-16 Werner Lemberg <wl@gnu.org>
1804
Werner Lemberge0843602016-07-16 18:46:28 +02001805 [truetype] Add bytecode support for GX variation fonts.
1806
1807 This commit implements undocumented (but confirmed) stuff from
1808 Apple's old bytecode engine.
1809
1810 GETVARIATION[], opcode 0x91
1811 This opcode pushes normalized variation coordinates for all axes
1812 onto the stack (in 2.14 format). Coordinate of first axis gets
1813 pushed first.
1814
1815 GETINFO[], selector bit 3
1816 If GX variation support is enabled, bit 10 of the result is set
1817 to 1.
1818
1819 * src/truetype/ttinterp.c: Include FT_MULTIPLE_MASTERS_H.
1820 (opcode_name) [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Updated.
1821 (Ins_GETINFO) [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Handle selector
1822 bit 3, checking support for variation glyph hinting.
1823 (Ins_GETVARIATION) [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: New function
1824 to implement opcode 0x91.
1825 (TT_RunIns) [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Handle opcode 0x91.
1826
18272016-07-16 Werner Lemberg <wl@gnu.org>
1828
Werner Lemberg32a32062016-07-16 16:39:26 +02001829 [truetype] Fix GETINFO bytecode instruction.
1830
1831 * src/truetype/ttinterp.c (Ins_GETINFO): Fix return value for
1832 stretching information.
1833
Behdad Esfahbod69446dd2016-07-16 10:52:38 +020018342016-07-16 Behdad Esfahbod <behdad@behdad.org>
1835
1836 [truetype] Make all glyphs in `Zycon' GX font work.
1837
1838 * src/truetype/ttgxvar.c (ft_var_readpackedpoints): Fix boundary
1839 tests.
1840
Werner Lemberga3b61252016-07-16 08:16:16 +020018412016-07-16 Werner Lemberg <wl@gnu.org>
1842
1843 [truetype] Fix GX delta tracing.
1844
1845 * src/truetype/ttgxvar.c (TT_Vary_Apply_Glyph_Deltas): Trace
1846 relative point movements.
1847
18482016-07-16 Behdad Esfahbod <behdad@behdad.org>
Werner Lembergf147fb22016-07-16 07:06:21 +02001849
1850 [truetype] More fixes for GX.
1851
1852 This finally fixes the rendering of the cyclist and the lizard in
1853 the `Zycon' font.
1854
1855 * src/truetype/ttgxvar.c (ft_var_readpackedpoints): `first' point
1856 index is always cumulative.
1857
1858 (tt_handle_deltas): Rename to...
1859 (tt_interpolate_deltas): ... This.
1860 Add new parameter for output point array.
1861 Update caller.
1862
1863 (TT_Vary_Apply_Glyph_Deltas): Add `points_out' array; it now holds
1864 the intermediate results of `tt_interpolate_deltas' that are to be
1865 added to `outline->points'.
1866
Werner Lembergaafff572016-07-16 06:41:39 +020018672016-07-15 Werner Lemberg <wl@gnu.org>
1868
1869 * src/autofit/aflatin.c (af_latin_hints_compute_segments): Thinko.
1870
1871 `max_pos' is always larger than `min_pos' so `FT_ABS' is not needed.
1872
1873 Reported by Alexei.
1874
Nikolaus Waxweiler86eb43a2016-07-16 06:37:57 +020018752016-07-16 Nikolaus Waxweiler <madigens@gmail.com>
1876
1877 * src/truetype/ttinterp.c (Ins_MIRP): Fix copy-and-paste error.
1878
1879 Problem reported by Hin-Tak Leung.
1880
Werner Lemberg894c0222016-07-15 10:23:11 +020018812016-07-15 Werner Lemberg <wl@gnu.org>
1882
Werner Lemberg1831e6f2016-07-15 10:35:32 +02001883 [autofit] Update and improve segment and edge tracing.
1884
1885 * src/autofit/afhints.c (af_glyph_hints_dump_segments): Trace
1886 `delta' also.
1887 Don't show first point of segment as a replacement for `pos'; this
1888 is (a) misleading, since the difference to `pos' can be almost
1889 arbitrarily large in corner cases, and (b) it is better to have all
1890 segment data in font units instead of a single value given in output
1891 space coordinates.
1892 Improve layout.
1893 (af_glyph_hints_dump_edges): Show px->units and units->px conversion
1894 values for convenience.
1895 Improve layout.
1896
18972016-07-15 Werner Lemberg <wl@gnu.org>
1898
Werner Lemberg894c0222016-07-15 10:23:11 +02001899 [autofit] For edges, reject segments wider than 1px (#41334).
1900
1901 * src/autofit/afhints.h (AF_SegmentRec): New member `delta'.
1902
1903 * src/autofit/aflatin.c (af_latin_hints_compute_segments): Compute
1904 `delta'.
1905 (af_latin_hints_compute_edges): Reject segments with a delta larger
1906 than 0.5px.
1907
Werner Lemberg631e2182016-07-14 06:25:05 +020019082016-07-14 Werner Lemberg <wl@gnu.org>
1909
Werner Lembergff655432016-07-14 15:01:55 +02001910 * include/freetype/freetype.h (FT_IS_NAMED_INSTANCE): New macro.
1911
19122016-07-14 Werner Lemberg <wl@gnu.org>
1913
Werner Lembergee3f36f2016-07-14 10:25:20 +02001914 [sfnt] Fix `face_index' value in `FT_Face' for named instances.
1915
1916 * src/sfnt/sfobjc.s (sfnt_init_face): Don't strip off higher 16bits.
1917
19182016-07-14 Werner Lemberg <wl@gnu.org>
1919
Werner Lemberg631e2182016-07-14 06:25:05 +02001920 * src/truetype/ttgxvar.c (TT_Vary_Apply_Glyph_Deltas): Fix tracing.
1921
Behdad Esfahbod0f9ddf22016-07-14 06:08:39 +020019222016-07-14 Behdad Esfahbod <behdad@behdad.org>
1923
1924 [truetype] Fix gxvar delta interpolation.
1925
1926 The coordinates of the base font should be used for interpolation
1927 purposes, NOT the current points (i.e., the result of accumulation
1928 of previous deltas).
1929
1930 * src/truetype/ttgxvar.c (TT_Vary_Apply_Glyph_Deltas): Initialize
1931 `points_org' before looping over all tuples.
1932
Werner Lembergf6aa0892013-05-10 07:58:47 +02001933
Werner Lemberg8e6c56f2005-10-18 06:09:13 +00001934----------------------------------------------------------------------------
1935
Werner Lemberg8160b202016-09-08 08:42:10 +02001936Copyright 2016 by
Werner Lemberg8e6c56f2005-10-18 06:09:13 +00001937David Turner, Robert Wilhelm, and Werner Lemberg.
1938
1939This file is part of the FreeType project, and may only be used, modified,
1940and distributed under the terms of the FreeType project license,
1941LICENSE.TXT. By continuing to use, modify, or distribute this file you
1942indicate that you have read the license and understand and accept it
1943fully.
1944
1945
1946Local Variables:
1947version-control: never
Werner Lemberg4e03fe72006-04-29 06:20:09 +00001948coding: utf-8
Werner Lemberg8e6c56f2005-10-18 06:09:13 +00001949End: