Commit Graph

11675 Commits

Author SHA1 Message Date
Behdad Esfahbod
9ed5f04a70 [subset] Simplify recent out-of-memory fixes
By checking return status of map->set().
2021-03-29 18:14:30 -06:00
Behdad Esfahbod
a8f9f85a91 [map] Return success from ->set() 2021-03-29 18:13:22 -06:00
Garret Rieger
8741914a80 [subset] fix memory leak when map insert fails. 2021-03-29 18:02:32 -06:00
Behdad Esfahbod
2397689387 Remove hb_success_t
Was not rolled-out yet.  So just expand.
2021-03-29 17:49:16 -06:00
Behdad Esfahbod
7a2eda7817 Move code around 2021-03-29 17:49:12 -06:00
Behdad Esfahbod
bcb57dccaa [sanitize] Add short-circuit to ArrayOfM1
Like the sibling ArrayOf types.
2021-03-29 17:49:08 -06:00
Garret Rieger
5b6da6d2f0 [subset] add fuzzer test case. 2021-03-29 17:41:07 -06:00
Garret Rieger
52df6b9fd8 [subset] check for set insertion success. 2021-03-29 17:41:07 -06:00
Garret Rieger
c6adb90a27 [subset] fix nullptr deref. 2021-03-29 17:41:07 -06:00
Garret Rieger
9a3537e5f6 [subset] invert err() return value. Undo previous change to check_success. 2021-03-29 17:15:22 -06:00
Garret Rieger
a804a0c903 [subset] add fuzzer test case. 2021-03-29 17:15:22 -06:00
Garret Rieger
cdba5d44c2 [subset] fix incorrect handling of return value in check_success in the error case. 2021-03-29 17:15:22 -06:00
Behdad Esfahbod
05e845c49a Make previous commit gcc-only 2021-03-29 16:02:10 -07:00
Behdad Esfahbod
b5e4032392 -Wno-unused-result
GCC doesn't let one turn off the warning using "(void) foo()".
People have introduced macros that do "unused << foo()" instead.
Until we do something similar, silence gcc.

Clang on the other hand understands "(void) foo()".
2021-03-29 15:57:36 -07:00
Khaled Hosny
c30349d54e [hb-view] Support kitty inline images protocol
https://github.com/harfbuzz/harfbuzz/issues/2758
2021-03-29 15:55:40 -06:00
Khaled Hosny
f7d5889b3e [hb-view] Support iTerm2 inline images protocol
https://github.com/harfbuzz/harfbuzz/issues/2758
2021-03-29 15:55:40 -06:00
Khaled Hosny
743baf3543 [build] Don’t look for FontConfig
We don’t currently use it anywhere. It was used briefly for the
hb-fc-list tool, but this tool have not been built since 2015:

commit cd042fc8c4
Author: Behdad Esfahbod <behdad@behdad.org>
Date:   Thu Jun 18 10:55:13 2015 -0700

    [util] Disable hb-fc-list for now

    Until I figure out what to do about the API, and finalize
    the tool.
2021-03-29 15:54:51 -06:00
Qunxin Liu
95230e291d [subset] support subsetting GSUB8 2021-03-29 15:54:11 -06:00
David Corbett
d18915f920 Reformat gen-tag-table.py 2021-03-28 10:21:46 -07:00
Garret Rieger
3c8273ab68 Check for alloc failures on the gsub/gpos_langsys maps in subset plan creation. 2021-03-25 16:53:56 -06:00
Behdad Esfahbod
29708e959a [aat] Fix offsetToIndex math for out-of-bounds values
Previously, some bad font data was accidentally being interpretted as
legit if it happened to not fall out of memory bounds. The intention
of the code was what this commit does.  I'm surprised we weren't getting
a "arithmetic between signed and unsigned values" warning / error
before.
2021-03-22 15:22:15 -07:00
Behdad Esfahbod
c5d6bdb4bf
Merge pull request #2857 from googlefonts/repacker
[subset] add a GSUB/GPOS table repacker to resolve offset overflows.
2021-03-18 14:38:55 -07:00
Garret Rieger
46bf03d691 [subset] add NODISCARD to error checking methods on serializer. 2021-03-18 14:35:36 -07:00
Garret Rieger
3827a3eb56 [subset] rename serializer::set_error() to err(). 2021-03-18 11:20:03 -07:00
Garret Rieger
f561fa6e4c Change priority queue to use (priority, value) instead of (value, priority). 2021-03-18 11:13:47 -07:00
Garret Rieger
b14475d2ae [subset] further changes to serializer error handling.
- Rename enum type and enum members.
- in_errors() now returns true for any error having been set. hb-subset now looks for offset overflow only errors to divert to repacker.
- Added INT_OVERFLOW and ARRAY_OVERFLOW enum values.
2021-03-18 10:51:26 -07:00
Garret Rieger
73ed59f7a6 [subset] store errors in the serializer as a flag set.
Make check_assign/check_equal specify the type of error to set.
2021-03-17 15:58:34 -07:00
Garret Rieger
b9ecc7420d [subset] init offset_overflow in hb_serialize_context_t. 2021-03-17 15:53:58 -07:00
Garret Rieger
cf79fc342d [subset] limit priority bumps to 16. 2021-03-17 15:53:58 -07:00
Garret Rieger
0104409959 Fix repack_tests for distcheck. 2021-03-17 15:53:58 -07:00
Garret Rieger
e2f14e81bd [subset] fix memory leaks in test-repacker. 2021-03-17 15:53:58 -07:00
Garret Rieger
d3e2ba7c01 [subset] comment cleanup in hb-repacker.hh 2021-03-17 15:53:58 -07:00
Garret Rieger
832f2b599b [subset] Refactor _subset () to reduce nesting and eliminate the use of 'goto'. 2021-03-17 15:53:58 -07:00
Garret Rieger
bb5c80a7c2 [subset] add error tracking to the repacker.
Also check for allocation failures as needed.
2021-03-17 15:53:58 -07:00
Garret Rieger
b8b8c58b9f [subset] add tests that check for successful repacking of a real font file. 2021-03-17 15:53:58 -07:00
Garret Rieger
6e9468fcfb [subset] cleanup memory leaks in the repacker. 2021-03-17 15:53:58 -07:00
Garret Rieger
a7a86a6eb4 [subset] Add prioritization offset resolution.
Vertices can now be prioritized to force them to sort closer to their parent. The resolver will attempt to use this for overflows on non-shared vertices.
2021-03-17 15:53:58 -07:00
Garret Rieger
b452b2c76c [subset] refactor repacker graph to cache edge count and distances of vertices. 2021-03-17 15:53:57 -07:00
Garret Rieger
75414e82b5 [subset] Add table duplication overflow resolution. 2021-03-17 15:53:57 -07:00
Garret Rieger
8286bd8094 [subset] use vectors instead of hashmaps throughout the repacker since all keys will be mapped for these use cases. 2021-03-17 15:53:57 -07:00
Garret Rieger
519ae96617 [subset] switch sort_shortest_distance() to use priority queue. 2021-03-17 15:53:57 -07:00
Garret Rieger
5d3511e5b1 [subset] Change compute_distances() to use a priority queue. 2021-03-17 15:53:57 -07:00
Garret Rieger
59ac0a0d0a [subset] Use priority for comparison in heap. 2021-03-17 15:53:57 -07:00
Garret Rieger
4c8dd41ed9 [subset] re-write compute distances to use an array lookup for the distance map. 2021-03-17 15:53:57 -07:00
Garret Rieger
5c4e0ffd97 [subset] Add a basic priority queue datastructure (binary heap). 2021-03-17 15:53:57 -07:00
Garret Rieger
dd8e5d0e1b [subset] Only run the repacker for GSUB/GPOS. 2021-03-17 15:53:57 -07:00
Garret Rieger
aaa7873d42 [subset] add topological sort by closest distance via Dijkstra's algorithm. 2021-03-17 15:53:57 -07:00
Garret Rieger
8ebe5d734f Implement will_overflow (). 2021-03-17 15:53:57 -07:00
Garret Rieger
6b1ea4cbe7 [subset] hook up the repacker to run if offset overflows are encountered during subsetting. 2021-03-17 15:53:57 -07:00
Garret Rieger
f4c78cc7dd [subset] Implement Kahn's algo for topological sorting instead of BFS. 2021-03-17 15:53:57 -07:00