Log

Author Commit Date CI Message
Ben Wagner 7bed7a02 2023-06-01T21:05:32 Fix some `FT_Fixed` vs. `FT_Long` confusion. `FT_Fixed` and `FT_Long` are both typedef'ed to be `signed long`. However, `FT_Fixed` implies that the lower 16 bits are being used to express fractional values and so these two types should not be confused. * include/freetype/internal/services/svmm.h (FT_Set_MM_Blend_Func): Use `FT_Fixed` for `coords`. Users are passing `FT_Fixed` and implementations are taking `FT_Fixed`. (FT_Get_MM_Blend_Func): Ditto. * src/autofit/afcjk.c (af_cjk_metrics_check_digits): Use `FT_Long` for `advance` and `old_advance`. `advance`'s address is passed as `FT_Long*` to `af_shaper_get_elem`, which writes the advance in em units (not fixed). The exact value is not important here as it is only compared to check whether it has changed. * src/autofit/aflatin.c (af_latin_metrics_check_digits): Ditto.
Ben Wagner 2fb8eda5 2023-06-01T19:38:36 */*: Remove many function pointer casts. In C it is undefined behavior to call a function through a function pointer of a different type. This is now detected by the Control Flow Integrity Sanitizer. All known issues have already been fixed. Prevent any accidental re-introduction by removing function pointer casts when defining services. The services will call the service functions through the function pointers on the service. As a result the functions must have the same type so there should be no need to cast. Removing the casts allows compilers to warn about assignment to an incompatible function pointer type.
Werner Lemberg b641b607 2023-06-03T06:09:30 Minor formatting.
Werner Lemberg 80a507a6 2023-05-23T13:13:56 Replace `sprintf` with `snprintf`. Fixes #1233. * include/freetype/config/ftstdlib.h (ft_sprintf): Replace with... (ft_snprintf): This new macro. * src/autofit/afhints.c (af_print_idx): Add argument to pass the buffer size. (af_glyph_hints_dump_points, af_glyph_hints_dump_segments, af_glyph_hints_dump_edges): Updated. * src/bdf/bdflib.c (BUFSIZE): New macro. (bdf_parse_properties_, bdf_parse_start_): Use `ft_snprintf`. * src/tools/ftrandom/ftrandom.c (do_test): Use `snprintf`.
Werner Lemberg 66cc4619 2023-05-23T12:54:48 docs/DEBUG: Formatting.
suzuki toshiya 562f3481 2023-05-20T12:52:25 [doc] Type1 GX (sfnt-wrapped Type1) is not supported. * docs/formats.txt: Clarify the reference of Type1 GX, and state that this format is not supported. This is because the content `TYP1' table is not exactly same with the Type1 font format specification; no eexec encryption is used. For detail and concrete examples, see the analysis on: https://gitlab.freedesktop.org/freetype/freetype/-/issues/1231
Craig White 2342a03a 2023-05-19T14:11:57 Add missing end quote of a string in the example code of FT_Trace_Set_Level
Seigo Nonaka 115e9275 2023-05-19T12:11:45 [truetype] Reduce heap allocation of `deltaSet` variation data. `deltaSet` is an array of packed integers that can be 32 bits, 16 bits, or 8 bits. Before this change, these values were unpacked to 32-bit integers. However, this can cause big heap allocations, e.g., around 500 KByte for 'NotoSansCJK'. To reduce this amount, store the packed integers and unpack them just before passing to the calculation. At calculation time, due to the variable length of region indices, temporary heap allocations are necessary. This heap allocation is not negligible and visible in `ftbench` results. So, use stack-allocated arrays for short array calculations. Fixes #1230. * include/freetype/internal/ftmmtypes.h (GX_ItemVarDataRec): New fields `wordDeltaCount` and `longWords`. * src/truetype/ttgxvar.c (tt_var_load_item_variation_store): Load packed data. (tt_var_get_item_delta): Unpack data before applying.
Jouk Jansen 99dadd56 2023-05-17T12:40:59 vms_make.com: Create shared executable for x86 version of OpenVMS.
Werner Lemberg 416d4c25 2023-05-15T15:44:36 Add new load flag `FT_LOAD_NO_SVG`. Modern color fonts often contain both an 'SVG' and 'COLR' table. FreeType always preferred 'SVG' over 'COLR' (this was a design decision), however, this might not be the right choice for the user. The new flags makes FreeType ignore the 'SVG' table while loading a glyph. Fixes #1229. * include/freetype/freetype.h (FT_LOAD_NO_SVG): New macro. * src/base/ftobjs.c (FT_Load_Glyph), src/cff/cffgload.c (cff_slot_load), src/truetype/ttgload.c (TT_Load_Glyph): Use it.
Werner Lemberg 872a759b 2023-05-13T09:34:45 .mailmap: Updated.
Alexei Podtelezhnikov e1a4e081 2023-05-12T22:27:08 [cache] Merge functions. * src/cache/ftccache.c (FTC_Cache_Init): Merge into... (ftc_cache_done): ... this function, with unnecessary checks removed.
Alexei Podtelezhnikov 771ff8bd 2023-05-12T22:21:47 [cache] Minor casting and cosmetic updates. * src/cache/ftcglyph.c (ftc_gcache_{init,done}): Remove casting. (FTC_GCache_Lookup): Cosmetic variable renaming. * src/cache/ftcsbits.c (ftc_snode_compare): Formatting.
Werner Lemberg 3af4772d 2023-05-12T05:58:43 * include/freetype/ftcache.h: Typo, punctuation.
Alexei Podtelezhnikov b07ab47b 2023-05-11T23:23:52 * include/freetype/ftcache.h: Formatted and updated.
suzuki toshiya 7132f5b0 2023-05-12T09:49:58 * include/freetype/internal/t1types.h: Fix the indentation.
Alexei Podtelezhnikov ad708d70 2023-05-11T17:41:49 [cache] Revise the dynamic hash table accounting. Instead of counting entries relative to the middle of the hash table, this switches to the absolute counter with the full index range mask. As a result, some calculations become a bit simpler. The cache resizing logic stays largely the same. * src/cache/ftccache.h (FTC_NODE_TOP_FOR_HASH): Revised with new counter. * src/cache/ftccache.c (ftc_get_top_node_for_hash): Ditto. (ftc_cache_resize): Simplify reallocations and stop their zeroing. (ftc_cache_init): Stop over-allocating but keep zeroing initially. (FTC_Cache_Clear, FTC_Cache_RemoveFaceID): Updated accordingly.
suzuki toshiya 6ca0a935 2023-05-11T14:31:23 [t1cid] Set FT_FACE_FLAG_CID_KEYED. * cidobjs.c (cid_face_init): Set FT_FACE_FLAG_CID_KEYED. * cidriver.c (cid_get_is_cid): Comment about the case that is_cid cannot guarantee the glyph collection specification.
Jouk Jansen c3876354 2023-05-09T07:15:53 * src/smooth/ftgrays.c (FT_SSE2): Don't define for VMS.
Werner Lemberg e02a40a4 2023-05-08T20:12:26 * src/cff/cffdrivr.c (cff_glyph_load): Fix guard for `size`. This was forgotten to change in commit 2b54eba36b (in May 2004). Reported as https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=58739
Werner Lemberg 5edd6d52 2023-05-08T07:22:59 Minor compiler warning fixes. * src/autofit/afcjk.c (af_cjk_get_standard_widths), src/autofit/aflatin.c (af_latin_get_standard_widths): Use `FT_CALLBACK_DEF`. * src/cff/cffparse.c (cff_parser_run): Initialize and fix allocation of `q`.
Werner Lemberg bd37b847 2023-05-08T06:46:55 * src/psaux/t1cmap.c: Signature fixes.
Werner Lemberg 968fc281 2023-05-08T06:26:43 * src/bzip2/ftbzip2.c: Signature fixes.
Werner Lemberg d52166ae 2023-05-08T06:15:44 [cache] Signature fixes. * src/cache/ftcglyph.c, src/cache/ftcglyph.h (FTC_GNode_Compare): Remove redundant function. It is equivalent to `ftc_gnode_compare` and becomes completely meaningless with fixed signatures. Update all callers. * src/cache/ftcsbits.c, src/cache/ftcsbits.h (FTC_SNode_Compare): Remove redundant function. It is equivalent to `ftc_snode_compare` and becomes completely meaningless with fixed signatures. Update all callers.
Werner Lemberg c8ae37ba 2023-05-07T21:06:14 [sdf] Signature fixes.
Werner Lemberg 924329a9 2023-05-07T20:57:22 * src/svg/ftsvg.c: Signature fixes.
Werner Lemberg 6e7b1b76 2023-05-07T20:51:32 [raster] Signature fixes.
Werner Lemberg 02283a6e 2023-05-07T20:37:38 [smooth] Signature fixes.
Werner Lemberg 669b7f7d 2023-05-07T20:26:12 [pshinter] Signature fixes. * src/pshinter/pshrec.c (t1_hints_close, t1_hints_apply): New wrapper functions. (t1_hints_funcs_init): Use them. (t2_hints_close, t2_hints_apply): New wrapper functions. (t2_hints_funcs_init): Use them.
Werner Lemberg 274e0dd5 2023-05-07T19:54:46 [autofit] Signature fixes.
Werner Lemberg 365eb10d 2023-05-07T19:16:38 * src/sfnt/ttcmap: Signature fixes.
Werner Lemberg 60c11919 2023-05-07T16:42:01 * src/pcf/pcfdrivr.c: Signature fix.
Werner Lemberg 5f7a26fd 2023-05-07T16:30:21 * src/winfonts/winfnt.c: Signature fixes.
Werner Lemberg 394c4de9 2023-05-07T16:25:37 * src/type42/t42parse.c: Signature fixes.
Werner Lemberg 19aca966 2023-05-07T15:57:06 [pfr] Signature fixes.
Werner Lemberg 3297a7a9 2023-05-07T15:23:46 * src/cid/cidload.c: Signature fixes.
Werner Lemberg 4a28ff3d 2023-05-07T09:14:27 * src/cff/cffcmap.c: Signature fixes.
Werner Lemberg 563f4011 2023-05-07T08:50:44 * src/type1/t1load.c: Signature fixes.
Werner Lemberg 95d635ea 2023-05-07T08:34:32 [truetype] Signature fixes.
Werner Lemberg e05c0562 2023-05-07T08:29:15 [base] Signature fixes.
Werner Lemberg ff0ef828 2023-05-07T07:19:44 * src/type42/t42drivr.c: Clean up interface. Ensure that all driver functions use the signature of the service or driver. This avoids pointer mismatches, which are technically undefined behaviour. Recent compilers are more picky in catching them as part of Control Flow Integrity tests.
Werner Lemberg 7cc5dfa2 2023-05-07T07:10:23 * src/type1/*: Clean up interface. Ensure that all driver functions use the signature of the service or driver. This avoids pointer mismatches, which are technically undefined behaviour. Recent compilers are more picky in catching them as part of Control Flow Integrity tests.
Werner Lemberg 3a85bf0b 2023-05-07T06:43:21 * src/truetype/*: Clean up interface. Ensure that all driver functions use the signature of the service or driver. This avoids pointer mismatches, which are technically undefined behaviour. Recent compilers are more picky in catching them as part of Control Flow Integrity tests.
Werner Lemberg e245951c 2023-05-06T23:59:25 * src/sfnt/sfdriver.c, src/sfnt/ttbdf.c: Clean up interface. Ensure that all driver functions use the signature of the service or driver. This avoids pointer mismatches, which are technically undefined behaviour. Recent compilers are more picky in catching them as part of Control Flow Integrity tests. * src/sfnt/sfdriver.c (sfnt_load_table): New wrapper function. (sfnt_service_sfnt_table): Use it.
Werner Lemberg ceba488c 2023-05-06T20:14:27 * src/psnames/psmodule.c: Use `FT_CALLBACK_DEF`.
Werner Lemberg 4360e20e 2023-05-06T20:05:42 * src/pfr/pfrdrivr.c: face -> pfrface, pfrface -> face.
Werner Lemberg 0685b0ad 2023-05-06T20:01:47 * src/pcf/pcfdrivr.c: Clean up interface. Ensure that all driver functions use the signature of the service or driver. This avoids pointer mismatches, which are technically undefined behaviour. Recent compilers are more picky in catching them as part of Control Flow Integrity tests.
Werner Lemberg b9ce8e33 2023-05-06T19:23:45 * src/cid/cidriver.c: Clean up interface. Ensure that all driver functions use the signature of the service or driver. This avoids pointer mismatches, which are technically undefined behaviour. Recent compilers are more picky in catching them as part of Control Flow Integrity tests.
Werner Lemberg bc7466ad 2023-05-06T19:15:01 * src/bdf/bdfdrivr.c: Clean up interface. Ensure that all driver functions use the signature of the service or driver. This avoids pointer mismatches, which are technically undefined behaviour. Recent compilers are more picky in catching them as part of Control Flow Integrity tests.
Werner Lemberg c0414119 2023-05-06T18:57:42 * src/cff/*: Clean up interface. Ensure that all driver functions use the signature of the service or driver. This avoids pointer mismatches, which are technically undefined behaviour. Recent compilers are more picky in catching them as part of Control Flow Integrity tests.
Werner Lemberg 8fe50c2a 2023-04-27T23:06:51 [truetype] Fix style name handling for variation fonts. * include/freetype/internal/tttypes.h (TT_FaceRec): New field `non_var_style_name`. * src/sfnt/sfobjs.c (sfnt_load_face): Initialize `non_var_style_name`. (sfnt_done_face): Free `non_var_style_name`. * src/truetype/ttgxvar.c (TT_Set_Named_Instance): Restore non-VF style name if switching back to non-VF mode.
Werner Lemberg c8a24209 2023-04-27T11:40:46 [truetype] Fix PostScript name handling for variation fonts. A variation font's PostScript name of a named instance is usually different from the PostScript name of an unnamed instance. However, if a change between a named instance and an unnamed instance with exactly the same design axis values happened, it was possible that the PostScript name wasn't correctly updated. This commit reorganizes the code to handle this issue within the top-level API functions, using a new service to trigger recomputation of the PostScript name. * include/freetype/internal/services/svmm.h (FT_Construct_PS_Name_Func): New typedef. (FT_Service_MultiMasters): New field `construct_ps_name`. (FT_DEFINE_SERVICE_MULTIMASTERSREC): Updated. * src/base/ftmm.c (FT_Set_Var_Design_Coordinates, FT_Set_MM_Blend_Coordinates, FT_Set_Var_Blend_Coordinates): Call `mm->construct_ps_name` to handle `postscript_name`. (FT_Set_Named_Instance): Call `mm->construct_ps_name` to handle `postscript_name`. Use shortcut. * src/cff/cffdrivr.c (cff_construct_ps_name): New function. (cff_service_multi_masters): Updated. * src/truetype/ttgxvar.c (tt_set_mm_blend): Don't handle `postscript_name`. (TT_Set_MM_Blend): Simplify. (TT_Set_Named_Instance): Return -1 if axis values haven't changed. Don't set `face_index`. (tt_construct_ps_name): New function. * src/truetype/ttgxvar.h: Updated. * src/truetype/ttdriver.c (tt_service_gx_multi_masters): Updated. * src/type1/t1driver.c (t1_service_multi_masters): Updated. * src/type1/t1load.c (T1_Set_MM_Blend): Simplify.
Werner Lemberg 7af8fd00 2023-04-27T07:37:14 * include/freetype/internal/services/svmm.h: Minor changes.
Werner Lemberg 6713b1e4 2023-04-26T12:03:04 [truetype] Fix deactivation of variation font handling. According to the documentation, the functions `FT_Set_Named_Instance`, `FT_Set_MM_Design_Coordinates`, `FT_Set_Var_Design_Coordinates`, and `FT_Set_Var_Blend_Coordinates` can unset the `FT_FACE_FLAG_VARIATION` flag. (The same is true for `FT_Set_MM_WeightVector` but this information was accidentally omitted from the documentation.) However, if a call of these functions didn't change the axis values this could fail because internal shortcuts exited too early. This commit reorganizes the code to handle `FT_FACE_FLAG_VARIATION` in the top-level API functions, also taking care of the issue at hand. * src/base/ftmm.c (FT_Set_MM_Design_Coordinates, FT_Set_MM_WeightVector, FT_Set_Var_Design_Coordinates, FT_Set_MM_Blend_Coordinates, FT_Set_Var_Blend_Coordinates): Handle `FT_FACE_FLAG_VARIATION`. * src/truetype/ttgxvar.c (TT_Set_MM_Blend, TT_Set_Var_Design, TT_Set_Named_Instance) Don't handle `FT_FACE_FLAG_VARIATION`. * src/type1/t1load.c (T1_Set_MM_Blend, T1_Set_MM_WeightVector, T1_Set_MM_Design): Ditto. * src/cff/cffobjs.c (cff_face_init): Use `FT_Set_Named_Instance` instead of low-level functions. * src/truetype/ttobjs.c (tt_face_init): Ditto.
Werner Lemberg fdcb14a2 2023-04-27T06:18:38 s/set_instance/set_named_instance/ * include/freetype/internal/services/svmm.h (FT_Set_Instance_Func): Renamed to... (FT_Set_Named_Instance_Func): ...this. (FT_Service_MultiMasters): Rename `set_instance` to `set_named_instance`. (FT_DEFINE_SERVICE_MULTIMASTERSREC): Updated. * src/base/ftmm.c (FT_Set_Named_Instance): Updated. * src/cff/cffdrivr.c (cff_set_instance): Renamed to... (cff_set_named_instance): ...this. (cff_service_multi_masters): Updated. * src/cff/cffobjs.c (cff_face_init): Updated. * src/truetype/ttdriver.c (tt_service_gx_multi_masters): Updated. * src/type1/t1driver.c (t1_service_multi_masters): Updated.
Werner Lemberg fb982e78 2023-04-26T08:17:17 New Variation Font function `FT_Get_Default_Named_Instance`. * include/freetype/ftmm.h, src/base/ftmm.c (FT_Get_Default_Named_Instance): New function. * include/freetype/internal/services/svmm.h (FT_Get_Default_Named_Instance_Func): New typedef. (FT_Service_MultiMasters): New field `get_default_named_instance`. (FT_DEFINE_SERVICE_MULTIMASTERSREC): Updated. * include/freetype/internal/tttypes.h (TT_Face): New field `var_default_named_instance`. * src/sfnt/sfobjc.s (sfnt_init_face): Initialize `var_default_named_instance`. * src/cff/cffdrivr.c (cff_get_default_named_instance): New function. (cff_service_multi_masters): Updated. * src/truetype/ttgxvar.c (TT_Get_MM_Var): Initialize `var_default_named_instance`. (TT_Get_Default_Named_Instance): New function. * src/truetype/ttgxvar.h: Updated. * src/truetype/ttdriver.c (tt_service_gx_multi_masters): Updated. * src/type1/t1driver.c (t1_service_multi_masters): Updated. * docs/CHANGES: Updated.
Werner Lemberg b5e57b04 2023-05-06T16:41:13 [cid] Improve tracing messages; formatting.
Alexei Podtelezhnikov 9127c68f 2023-05-04T16:54:22 * src/cache/ftccache.c (ftc_node_hash_unlink): Minor.
Alexei Podtelezhnikov 345f8810 2023-05-03T23:33:32 * src/cache/ftcmru.c (FTC_MruList_RemoveSelection): Purge backwards.
Alexei Podtelezhnikov f2f97545 2023-05-03T23:02:04 [cache] Revise list cleansing. * src/cache/ftcmru.c (FTC_MruList_RemoveSelection): Use one loop to do it. * src/cache/ftcmanag.c (FTC_Manager_Compress, FTC_Manager_FlushN): Streamline loops.
suzuki toshiya be15811c 2023-05-03T01:31:37 [t1cid] Improve cid_get_cid_from_glyph_index(). Update cid_get_cid_from_glyph_index() to return an error and CID=0 in the case that the specified glyph index points to an invalid entry. cidgload.h (cid_compute_fd_and_offsets): Declare new helper function to set the fd_select and 2 offsets to access the glyph description data. cidgload.c (cid_compute_fd_and_offsets): Move the part loading fd_select and 2 offsets from cid_load_glyph() to here. If the loaded parameters are broken, return the Invalid_Offset error. This function does not load the glyph data, only fills these parameters. (cid_load_glyph): Use new helper function in above. cidriver.c (cid_get_cid_from_glyph_index): Check whether the requested glyph index points to a valid entry, by calling cid_compute_fd_and_offsets(). If it is valid, fill the cid by the glyph index (=CID). If it is invalid, return an error and fill the cid by 0.
Werner Lemberg 77bbfc59 2023-04-24T09:48:09 API documentation: Re-organize chapters and sections * Split the very long 'Base Interface' section into smaller sections. * Split the 'Core API' chapter into two chapters. * Remove single enumeration values from `@order` fields since they have no effect.
Alexei Podtelezhnikov 36a086b6 2023-04-28T19:40:35 * src/sfnt/pngshim.c (Load_SBit_Png): Remove FALL_THROUGH warning.
Werner Lemberg 08268691 2023-04-28T15:32:16 * src/sfnt/ttload.c (tt_face_load_font_dir): Add another guard. Reject 'OTTO' fonts with no valid tables.
Werner Lemberg 966ff5a5 2023-04-28T15:25:20 * src/cff/cffdrivr/c (cff_get_ps_name): Avoid unnecessary crash. The situation can happen if `FT_New_Face` (or one of its siblings) is called with a negative index to get the number of contained faces, followed immediately by a call to `FT_Get_Postscript_Name`. While this is not a valid use of the FreeType library there is no need for a crash. Fixes #1219.
Werner Lemberg 17a0c5df 2023-04-28T10:40:41 * src/cff/cffdrivr.c (cff_ps_get_font_info): Reject 'CFF2' format.
Werner Lemberg 4908c1e8 2023-04-28T06:54:25 * src/cid/cidgload.c (cid_load_glyph): Fix compiler warnings.
Werner Lemberg 13df1c7d 2023-04-26T13:17:36 Minor documentation updates.
Werner Lemberg 9a3d05d9 2023-04-26T19:00:05 * src/ttgxvar.c: Minor changes. (TT_Get_MM_Var): Improve tracing messages. (tt_set_mm_blend): Minor speed-up.
Werner Lemberg cfe54d6a 2023-04-26T13:15:57 s/this is,/that is,/
Alexei Podtelezhnikov 7ab541a2 2023-04-26T23:15:24 [bdf] Clean up the atom property parsing. * src/bdflib.c (bdf_is_atom_): Refactor code with fewer checks. (bdf_list_join_): Return NULL. (bdf_add_comment_): Use const argument. (bdf_get_property): Ditto, ditto, make the function static. * src/bdf.h (bdf_get_property): Remove prototype.
Werner Lemberg 0a3836c9 2023-04-25T09:54:09 Improve/add source comments and documentation.
Werner Lemberg 40676afc 2023-04-25T09:30:30 [sfnt] Fix handling of PS names for Variation Fonts. * src/sfnt/sfdriver.c (get_win_string, get_apple_string): Continue construction of string if an invalid character is encountered. Fixes #1218.
suzuki toshiya f312b340 2023-04-22T02:11:21 [t1cid] Change the trace messages of the charstrings retrieval errors. The t1cid driver catches 3 types of errors in the charstrings retrieval; A) The invalid FD number, there are 2 subtypes; A-1) FD number is the maximum number fitting to FDBytes. A-2) FD number is greater than num_dicts. B) Declared length is overrunning. C) Declared length is invalid (its end is before its head). Considering that some widely distributed fonts (e.g., "CJKV" book by O'Reilly) have A-1 errors in the unimplemented glyphs, the trace level for A-1 is calmed to level 1. The errors A-2, B, and C would be irregular; their trace levels are kept at level 0, but the updated trace messages include the CID number.
suzuki toshiya 9806414c 2023-04-24T13:36:30 [truetype] Fix `make multi'. * src/truetype/ttgxvar.c: Include freetype/internal/services/svmetric.h for the FT_Service_MetricsVariations type definition.
Ben Wagner 8154d8e2 2023-04-19T13:48:59 [services] FT_Size_Reset_Func to return FT_Error The `MetricsVariations` `FT_Size_Reset_Func` is currently defined to return `void`, but the implementations return `FT_Error`. Even though the pointers passed will be the same at runtime, calling a function through a pointer of a different type from the original function pointer type is undefined behavior. This may be caught at runtime by Control Flow Integrity with something like clang's `cfi-icall`. Issue: https://crbug.com/1433651 * include/freetype/internal/services/svmetric.h (FT_Size_Reset_Func): return `FT_Error` instead of `void`.
Ben Wagner c4fe77c3 2023-04-17T11:17:16 [truetype] tt_size_reset_height to take FT_Size The `MetricsVariations` `FT_Size_Reset_Func` is defined to take an `FT_Size`. Because `tt_size_reset_height` is to be used as such a function, it must also take an `FT_Size` instead of a `TT_Size`. Even though the pointers passed will be the same at runtime, calling a function through a pointer of a different type from the original function pointer type is undefined behavior. This may be caught at runtime by Control Flow Integrity with something like clang's `cfi-icall`. Issue: https://crbug.com/1433651 * src/truetype/ttobjs.h (tt_size_reset_height): take `FT_Size` * src/truetype/ttobjs.c (tt_size_reset_height): take `FT_Size` and update documentation
Werner Lemberg ea9fca0a 2023-04-13T06:34:32 * src/truetype/ttinterp.c: Remove outdated comments.
Ben Wagner e78e2d29 2023-04-06T11:16:29 [sfnt, truetype] Add `size_reset` to `MetricsVariations`. This is a generalization of commit ``` commit e6699596af5c5d6f0ae0ea06e19df87dce088df8 Author: Werner Lemberg <wl@gnu.org> Date: Thu Feb 2 11:38:04 2017 +0100 [truetype] Fix MVAR post-action handling. ``` It is also possible for plain `CFF ` style fonts to contain an `fvar` and `MVAR` table and use `cff_metrics_adjust`. `tt_size_reset` should only be called with `TT_Size` and never with `CFF_Size`. Allow the "metrics-variations" service to specify the correct function (if any) to reset `FT_Size`s after adjusting metrics. * src/truetype/ttobjs.c (tt_size_reset): Split off some functionality into... (tt_size_reset_height): ... this new function. * src/truetype/ttdriver.c (tt_service_metrics_variations): Add `size_reset`. (tt_size_select, tt_size_request): Updated. * src/truetype/ttobjs.h: Updated. * include/freetype/internal/services/svmetric.h (MetricsVariations): Add `size_reset`. (FT_DEFINE_SERVICE_METRICSVARIATIONSREC): Updated. * include/freetype/internal/tttypes.h (TT_FaceRec_): Rename `var` to `tt_var` and add `face_var`. * src/cff/cffdrivr.c (cff_service_metrics_variations): Add `size_reset`. (cff_hadvance_adjust, cff_metrics_adjust): Updated. * src/cff/cffobjs.c (cff_face_init): Use `face_var`. * src/sfnt/sfobjs.c (sfnt_init_face): Initialize `face_var`. * src/sfnt/ttmtx.c (tt_face_get_metrics): Use `tt_var`. * src/truetype/ttgxvar.c (tt_size_reset_iterator): Renamed to... (ft_size_reset_iterator): ... this new function. Call `size_reset`. (tt_apply_mvar): Pass `size_reset` to `ft_size_reset_iterator`. Fixes #1211
Alexei Podtelezhnikov e77d8ba8 2023-04-10T15:17:17 * src/cff/cffcmap.c (cff_cmap_encoding_char_next): Abbreviate.
Alexei Podtelezhnikov 1a4c18f7 2023-04-10T15:30:43 Align `char_next` return types. This is mostly cosmetic because FT_UInt and FT_UInt32 are likely identical. * src/sfnt/ttcmap.c, src/cff/cffcmap.c, src/psaux/t1cmap.c, src/psnames/psmodule.c, include/freetype/internal/service/svpcsmap.h, src/pfr/pfrcmap.c, src/winfonts/winfnt.c (*_char_next): return FT_UInt.
Alexei Podtelezhnikov d2544433 2023-04-08T23:15:41 [sfnt] Clean up CMAP{4,12,13} handling. This moves the charcode overflow checks upstream and turns some while-loops into the do-while ones to avoid the uninitialized warnings. This should slightly reduce the number of checks and jumps. * src/sfnt/ttcmap.c (tt_cmap{4,12,13}_next, tt_cmap{4.12.13}_char_map_linear): Remove the charcode overflow check. (tt_cmap{4,12,13}_char_map_binary): Ditto and use do-while. (tt_cmap{12,13}_char_next): Add the overflow check.
Alexei Podtelezhnikov b0a4f992 2023-04-02T22:45:48 * src/sfnt/ttpost.c (load_format_25): Do not abort frame reading.
Alexei Podtelezhnikov 340767bf 2023-04-02T22:00:59 * src/sfnt/ttpost.c (load_format_*): Streamline frame reading.
Alexei Podtelezhnikov 311b78fa 2023-04-02T09:24:16 * src/sfnt/ttpost.c: Formatting and comments.
Alexei Podtelezhnikov 8f7b1455 2023-04-01T23:37:51 [sfnt] Consolidate POST version 2.0 and 2.5 (pt 2). * src/sfnt/ttpost.c (load_format_20, load_format_25): Update arguments and move shared calls and checks upstream to... (load_post_names): ... this function. (tt_face_free_ps_names, tt_face_get_ps_name): Updated.
Alexei Podtelezhnikov 9597a62b 2023-04-01T22:34:30 [sfnt] Consolidate POST version 2.0 and 2.5 (pt 1). The deprecated POST version 2.5 can be handled using the data structures of version 2.0. The goal is to reduce the footprint. * include/freetype/internal/tttypes.h (TT_Post_Names): Absorb and... (TT_Post_20, TT_Post_25): ... remove these structures. src/sfnt/ttpost.c (load_post_names, tt_face_get_ps_name, tt_face_free_ps_names, load_format_20): Updated accordingly. (load_format_25): ditto and convert offsets to glyph indices.
Alexei Podtelezhnikov 6d7b8b22 2023-03-31T23:17:46 [sfnt] Miscellaneous POST clean-ups. * src/sfnt/ttpost.c (load_format_20): Decrease casts. (load_format_25): Check the table length and impose a theoretical glyph number limit usable with 8-bit offset. Decrease casts. (load_post_names): Pass the mapping data length without 2 bytes.
Alexei Podtelezhnikov 0db69970 2023-03-30T09:06:35 * src/sfnt/ttpost.c (load_format_20): Simplify comutations.
Alexei Podtelezhnikov 4679fcb6 2023-03-29T00:21:00 [sfnt] Streamline POST format 2.0 handing (cont'd). * src/sfnt/ttpost.c (load_format_20): Co-allocate the string data and their pointers, which makes it easier to handle and free them. (tt_face_free_ps_names): Updated. * include/freetype/internal/tttypes.h (TT_Post_20): Update type.
Alexei Podtelezhnikov 4d8db130 2023-03-20T16:53:51 [cff] Simplify `t2_strings` management in the old engine. * src/cff/cffparse.c (cff_parser_run): Allocate the charstring buffers and the list nodes together so that they can be freed at once. (finalize_t2_strings): Removed as no longer needed. (cff_parser_done): Updated.
Alexei Podtelezhnikov 4f0a55d1 2023-03-19T10:13:52 [cff] Rework the stream limit checks. The old stream limit checks, before 6986ddac1ece, were good but pointless for the crafted t2_strings. Checking limits there is not necessary as they are created to hold all data. By using two conditions, we can detect the actual crossing of the stream boundary as appropriate for the stream pointer only. The t2_strings parsing will not be triggering these checks. * src/cff/cffparse.c (cff_parser_within_limits): Removed. (cff_parse_real, cff_parse_integer): Redesign the stream limit check. (cff_parse_num, do fixed, cff_parse_fixed_dynamic): Update callers.
Alexei Podtelezhnikov 8fc6df10 2023-03-17T23:35:10 * src/truetype/ttgload.c (TT_Load_Simple_Glyph): Use for-loop. Even though we never call `TT_Load_Simple_Glyph` with zero contours, out of abundance of precaution, let's handle this case properly.
Alexei Podtelezhnikov ef636696 2023-03-17T23:25:45 [truetype] Clean up zeroing and local variables. * src/truetype/ttgload.c (TT_Process_Simple_Glyph): Avoid zeroing. (load_truetype_glyph): Avoid zeroing and clean local variables.
Werner Lemberg 7be364c6 2023-03-16T05:25:36 * include/freetype/ftsystem.h (FT_Stream_IoFunc): Improve documentation. Fixes #1208.
Alexei Podtelezhnikov dd78d4a7 2023-03-16T03:28:59 * src/base/ftsynth.c (FT_GlyphSlot_AdjustWeight): New API.
Alexei Podtelezhnikov 764bc8e4 2023-03-15T23:18:18 [truetype] Clean up glyph loading. * src/truetype/ttgload.c (TT_Load_Simple_Glyph): Clean space checking. (TT_Hint_Glyph): Don't copy the outline structure. (TT_Process_Simple_Glyph): Cosmetic update.
Alexei Podtelezhnikov e7164762 2023-03-15T18:48:27 * src/truetype/ttgload.c (TT_Load_Simple_Glyph): Clean up.
Werner Lemberg d857bd53 2023-03-13T11:47:38 builds/vms/apinames_vms.bash: Fix `unzip` artifact The problem occured when unpacking a zip file created on OpenVMS on Linux. While OpenVMS knows many different file formats, Unix only knows stream-LF and binary. In principle `zip` on Linux should have translated the file to stream-LF but failed to do so. That caused the file to incorrectly contain only one line with control-characters.
Alexei Podtelezhnikov b9376065 2023-03-10T23:41:39 [truetype] Fix recent fallout in memory management. * src/truetype/ttgload.c (TT_Process_Composite_Glyph, TT_Load_Simple_Glyph): Clean up old instructions regardless of new ones, postpone setting `control_len` and `control_data` until... (TT_Load_Glyph): ... the exit from this function.