src


Log

Author Commit Date CI Message
Behdad Esfahbod 7a2eda78 2021-03-29T17:32:29 Move code around
Behdad Esfahbod bcb57dcc 2021-03-29T17:31:09 [sanitize] Add short-circuit to ArrayOfM1 Like the sibling ArrayOf types.
Garret Rieger 52df6b9f 2021-03-29T16:17:27 [subset] check for set insertion success.
Garret Rieger c6adb90a 2021-03-29T16:08:44 [subset] fix nullptr deref.
Garret Rieger cdba5d44 2021-03-29T14:23:59 [subset] fix incorrect handling of return value in check_success in the error case.
Garret Rieger 9a3537e5 2021-03-29T14:34:24 [subset] invert err() return value. Undo previous change to check_success.
Behdad Esfahbod 05e845c4 2021-03-29T16:02:10 Make previous commit gcc-only
Behdad Esfahbod b5e40323 2021-03-29T15:54:40 -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()".
Qunxin Liu 95230e29 2021-03-18T17:41:25 [subset] support subsetting GSUB8
David Corbett d18915f9 2021-03-28T10:09:13 Reformat gen-tag-table.py
Garret Rieger 3c8273ab 2021-03-25T11:39:57 Check for alloc failures on the gsub/gpos_langsys maps in subset plan creation.
Behdad Esfahbod 29708e95 2021-03-22T15:22:15 [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.
Garret Rieger 46bf03d6 2021-03-18T14:35:36 [subset] add NODISCARD to error checking methods on serializer.
Garret Rieger 3827a3eb 2021-03-18T11:20:03 [subset] rename serializer::set_error() to err().
Garret Rieger f561fa6e 2021-03-18T11:13:47 Change priority queue to use (priority, value) instead of (value, priority).
Garret Rieger b14475d2 2021-03-18T10:51:26 [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.
Garret Rieger 73ed59f7 2021-03-17T15:53:10 [subset] store errors in the serializer as a flag set. Make check_assign/check_equal specify the type of error to set.
Garret Rieger 6e9468fc 2020-11-09T16:52:36 [subset] cleanup memory leaks in the repacker.
Garret Rieger a7a86a6e 2020-11-06T16:22:48 [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.
Garret Rieger b9ecc742 2021-02-16T13:39:10 [subset] init offset_overflow in hb_serialize_context_t.
Garret Rieger cf79fc34 2021-02-16T13:24:43 [subset] limit priority bumps to 16.
Garret Rieger e2f14e81 2020-11-11T13:55:35 [subset] fix memory leaks in test-repacker.
Garret Rieger d3e2ba7c 2020-11-11T13:50:18 [subset] comment cleanup in hb-repacker.hh
Garret Rieger 832f2b59 2020-11-10T16:15:37 [subset] Refactor _subset () to reduce nesting and eliminate the use of 'goto'.
Garret Rieger bb5c80a7 2020-11-10T14:11:57 [subset] add error tracking to the repacker. Also check for allocation failures as needed.
Garret Rieger b452b2c7 2020-11-06T15:37:05 [subset] refactor repacker graph to cache edge count and distances of vertices.
Garret Rieger 75414e82 2020-11-05T16:39:23 [subset] Add table duplication overflow resolution.
Garret Rieger 8286bd80 2020-11-05T14:23:29 [subset] use vectors instead of hashmaps throughout the repacker since all keys will be mapped for these use cases.
Garret Rieger 519ae966 2020-11-05T11:22:16 [subset] switch sort_shortest_distance() to use priority queue.
Garret Rieger 5d3511e5 2020-11-05T10:34:26 [subset] Change compute_distances() to use a priority queue.
Garret Rieger 59ac0a0d 2020-11-05T10:29:56 [subset] Use priority for comparison in heap.
Garret Rieger 4c8dd41e 2020-11-05T09:21:25 [subset] re-write compute distances to use an array lookup for the distance map.
Garret Rieger 5c4e0ffd 2020-11-04T16:08:01 [subset] Add a basic priority queue datastructure (binary heap).
Garret Rieger dd8e5d0e 2020-11-03T14:01:42 [subset] Only run the repacker for GSUB/GPOS.
Garret Rieger aaa7873d 2020-11-02T16:16:27 [subset] add topological sort by closest distance via Dijkstra's algorithm.
Garret Rieger 8ebe5d73 2020-11-02T14:51:39 Implement will_overflow ().
Garret Rieger 6b1ea4cb 2020-10-30T12:16:26 [subset] hook up the repacker to run if offset overflows are encountered during subsetting.
Garret Rieger f4c78cc7 2020-10-30T10:29:51 [subset] Implement Kahn's algo for topological sorting instead of BFS.
Garret Rieger 00f393dc 2020-10-29T14:58:34 [subset] finish up BFS sort implementation.
Garret Rieger 1584d3cb 2020-10-28T17:49:09 [subset] Start a proof of concept implementation of the GSUB/GPOS offset overflow resolver.
Qunxin Liu 56ca4357 2021-01-28T15:21:26 [subset] fix for collect_features and remove_redundant_lamngsys previously remove_redundant_sys () is missing in harfbuzz, after redundant langsys removal, some features are removed as well in prune_features() in fonttools. This change is trying to get the same result between harfbuzz and fonttools.
Qunxin Liu 0e1c0fa4 2021-01-12T10:17:14 [subset] optimize glyph closure method: step 5 add testcase and some fixes
Qunxin Liu b8a58a0c 2021-01-10T15:50:04 [subset] optimize glyph closure method: step 4 optimize recurse_lookups in Context/ChainContext glyph closure, only the glyphs that the parent lookup can apply the recursion to can participate in recursing the lookup.
Qunxin Liu 62423504 2021-01-05T14:54:40 [subset] optimize glyph closure method: step 3 Add function intersects_coverage_glyphs that collects set of matching glyphs in Coverage table
Qunxin Liu ef78d0f9 2021-01-05T10:16:50 [subset] optimize glyph closure method: step 2 Add function intersects_class_glyphs that collects set of glyphs matching class in ClassDef table
Qunxin Liu b4fc593c 2020-12-09T10:44:18 [subset] optimize glyph closure method: step1 Previous GSUB glyph closure is done by recursively visiting all reachable lookup tables that apply to any glyphs in the current/input glyph set, but actually only the glyphs that the parent lookup can apply the recursion to can participate in recursing the lookup. This is step 1 for glyph closure optimization: 1. Add stack of currently active glyph set pointers into hb_closure_context_t 2. Update closure() method in simple GSUB tables to use this stack in order not to change current glyph set at different stages of recursion 3. Add function may_have_non_1to1() to GSUB tables
Garret Rieger 2df39bca 2021-03-16T14:20:49 [subset] don't allocate a set to use as a glyph filter for PairPosFormat2.
Garret Rieger bb54e104 2021-03-16T13:19:26 [subset] Also filter class1 by coverage when collecting variation indices for PairPosFormat2.
Garret Rieger 190b7a98 2020-10-08T14:44:54 [subset] Update PairPosFormat2 subsetting to match fontTools updated subsetting (https://github.com/fonttools/fonttools/pull/2221) - subset class def 1 against the coverage table. - Don't re-use class 0 in class def 2. - Ignore class 0 glyphs for the purposes of determing format 1 vs format 2 encoding for ClassDef. Add an additional test case which demonstrates these issues.
Khaled Hosny 03538e87 2021-03-16T19:28:35 2.8.0
Behdad Esfahbod 9e397ff2 2021-03-15T16:50:54 [buffer] Fix order of HB_INTERNAL HB_DISCARD Sucks that has to be specified in this order. But that is what it is for now. Was only exhibiting problem on C++>=17 since that's when the [[nodiscard]] was introduced.
Behdad Esfahbod 8450f43a 2021-03-15T15:18:06 [buffer] HB_NODISCARD next_glyph()
Behdad Esfahbod f4bc7673 2021-03-15T14:54:45 [buffer] Implement copy_glyph() in terms of output_info()
Behdad Esfahbod f73982a6 2021-03-15T14:52:19 [buffer] Implement replace_glyph() in terms of replace_glyphs(1,1) I get exact same binary size with this, suggesting that compiler is optimizing these as needed.
Behdad Esfahbod 862f9134 2021-03-15T14:48:50 [buffer] Implement output_glyph() in terms of replace_glyphs(0,1) To my surprise, saves ~20kb in my build (non-size-optimized) build. The output_glyph() method is never used in the fast paths, so doesn't matter if is not fully optimized for the special case it is.
Behdad Esfahbod 34a1204f 2021-03-15T14:39:06 [buffer] HB_NODISCARD output_glyph() Also, generalize and use replace_glyphs() in morx where output_glyph() was used in a loop.
Behdad Esfahbod e6be9eb4 2021-03-15T14:12:10 [buffer] HB_NODISCARD output_info()
Behdad Esfahbod 2a0dbb3e 2021-03-15T14:10:39 [buffer] HB_NODISCARD copy_glyph()
Behdad Esfahbod b05e5d9a 2021-03-15T14:08:08 [buffer] HB_NODISCARD next_glyphs()
Behdad Esfahbod 4ae8aab8 2021-03-15T14:01:52 [buffer] HB_NODISCARD has_separate_output()
Behdad Esfahbod 8d3701f5 2021-03-15T14:01:32 [buffer] HB_NODISCARD in_error()
Behdad Esfahbod 41e05479 2021-03-15T14:00:00 [buffer] HB_NODISCARD shift_forward()
Behdad Esfahbod 83b3784d 2021-03-15T13:59:14 [buffer] HB_NODISCARD make_room_for()
Behdad Esfahbod c355508a 2021-03-15T13:58:30 [buffer] HB_NODISCARD ensure_glyphs() / ensure_unicode()
Behdad Esfahbod bc22305b 2021-03-15T13:57:18 [buffer] HB_NODISCARD ensure_inplace()
Behdad Esfahbod cac6c86d 2021-03-15T13:46:54 [buffer] HB_NODISCARD move_to()
Behdad Esfahbod 05d2d37f 2021-03-15T13:43:29 [buffer] HB_NODISCARD ensure()
Behdad Esfahbod d8028a07 2021-03-15T13:34:36 [buffer] HB_NODISCARD enlarge()
Behdad Esfahbod 3f1998a0 2021-03-15T13:33:44 [buffer] HB_NODISCARD replace_glyph()
Behdad Esfahbod 607979d1 2021-03-15T13:23:48 [buffer] HB_NODISCARD replace_glyphs()
Behdad Esfahbod 906c9928 2021-03-15T13:13:45 [buffer] Return success status from buffer ops that can fail Previous error-handling philosophy was that user doesn't need to immediately know whether operation failed. But as can be seen after we added malloc-failing fuzzing, there's just so many places in the code that a failure of these operations needs to be mitigated before further operations. So I'm moving towards returning success here, and possibly making it nodiscard.
Behdad Esfahbod a5b8e7db 2021-03-15T12:46:58 [hangul] Improve error handling I did a review; changed some "return"s to "break"s, which should be identical. Removed one check just before "continue" because not necessary. The added error check is the actual fix. Should fix https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=31755
Behdad Esfahbod 99767f93 2021-03-15T12:36:59 [hangul] Whitespace
Behdad Esfahbod 3622120f 2021-03-10T12:21:43 [subset] Make ClassDef format2 .intersects() return false if range value 0 We treat Class0 as "doesn't intersect". That's the only meaningful interpretation. If one allos Class0 to mean "intersects", then the intersects() result should be true iff glyphset is non-empty. Related to https://github.com/harfbuzz/harfbuzz/issues/2703
David Corbett e19de65e 2021-03-08T13:12:47 Update hb-ot-tag-table.hh (#2890)
Khaled Hosny 7686ff85 2021-03-04T23:09:32 [ot] Keep substituted Default_Ignorables (#2886) Don’t replace Default_Ignorables with zero-width space if they are substituted or multiplied, not just when ligated. After this change, HarfBuzz output matches that of Uniscribe and CoreText for the new tests. Fixes https://github.com/harfbuzz/harfbuzz/issues/2883
Behdad Esfahbod 5efa04c8 2021-03-02T16:26:41 [Makefile] Rebuild .def files if config changed I was getting check-symbols failure because my previous build was without CoreText, and after reconfiguring with CoreText, the old harfbuzz.defs file was not being regenerated.
Behdad Esfahbod d351bbf0 2021-03-02T16:24:54 [Makefile] Remove unused variable HBNODISTHEADERS Not sure what it was used for before.
Behdad Esfahbod fd489433 2021-03-02T16:21:17 [indic] Fix cluster-merging logic with cluster-level=1 Was producing non-monotonic cluster numbers because our faulty logic was not merging clusters if something from before base and after base had switched positions. Fixes https://github.com/harfbuzz/harfbuzz/issues/2272
Behdad Esfahbod 2902529b 2021-03-02T15:05:22 [subset] Fix HB_TINY build Fixes https://github.com/harfbuzz/harfbuzzjs/issues/34#issuecomment-789247723
Behdad Esfahbod 7cb22ba7 2021-03-01T12:44:06 Include C headers with their C++ names (#2882) Remove unnecessary includes. Fixes build with some known broken SDKs (Nintendo Switch?) https://en.cppreference.com/w/cpp/header Fixes https://github.com/harfbuzz/harfbuzz/pull/2881
Behdad Esfahbod 486da35c 2021-02-23T13:58:14 m Add comments to IntType cast out operator Okay, bots seem to be happy. Merging.
Behdad Esfahbod 83b66bfb 2021-02-23T13:04:25 Another try to fix narrowing error ../src/hb-ot-layout-gsubgpos.hh: In instantiation of ‘void OT::ChainRule::serialize_array(hb_serialize_context_t*, OT::HBUINT16, Iterator) const [with Iterator = hb_map_iter_t<hb_array_t<const OT::IntType<short unsigned int> >, const hb_map_t*&, (hb_function_sortedness_t)0, 0>; typename hb_enable_if<hb_is_iterator_of<Lhs, typename Lhs::item_t>::value>::type* <anonymous> = 0; OT::HBUINT16 = OT::IntType<short unsigned int>]’: ../src/hb-ot-layout-gsubgpos.hh:2341:30: required from here ../src/hb-ot-layout-gsubgpos.hh:2326:15: error: narrowing conversion of ‘(unsigned int)g’ from ‘unsigned int’ to ‘short unsigned int’ inside { } [-Werror=narrowing] c->copy (HBUINT16 {g}); ~~~~~~~~^~~~~~~~~~~~~~ https://github.com/harfbuzz/harfbuzz/pull/2875
Behdad Esfahbod 6c4bb608 2021-02-22T22:45:32 Fix narrowing errors with recent changes
Behdad Esfahbod d6bd00a4 2021-02-22T22:42:50 Revert back IntType out cast to signed/unsigned Previous commit didn't fix the bots. Putting it back now that I understand why I initially did the "Wide" casts. But only doing it for out-cast this time. This causes "narrowing" warnings whenever we are converting signed/unsigned to smaller HBUINT16 etc. But those are valuable warnings. We should address those separately instead of ignoring. Maybe we should start using uint16_t more liberally in the internal subsetter function signatures then.
Behdad Esfahbod 09836013 2021-02-22T22:33:17 Add back wider cast to IntType My local clang12 is fine, but many bots are not: ../src/hb-ot-cff1-table.hh: In instantiation of ‘bool CFF::Charset1_2<TYPE>::sanitize(hb_sanitize_context_t*, unsigned int) const [with TYPE = OT::IntType<unsigned char>]’: ../src/hb-ot-cff1-table.hh:554:13: required from here ../src/hb-ot-cff1-table.hh:377:60: error: comparison between signed and unsigned integer expressions [-Werror=sign-compare] if (unlikely (!ranges[i].sanitize (c) || (num_glyphs < ranges[i].nLeft + 1))) ~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~ Enabling the extra cast operator mentioned in previous commit to see if that fixes this case. Again, I'd be happy to say "use 1u instead of 1" if this was universally erred on. But since some compilers happily compile this while others err, it would be a huge headache. Let's see... https://github.com/harfbuzz/harfbuzz/pull/2875
Behdad Esfahbod 567cedcc 2021-02-22T22:09:15 Narrow down cast operators on IntType Say for USHORT, we were implementing casts from and to unsigned. With this change, we cast from and to uint16_t only. This allows compiler more opportunities to catch possible narrowing issues in the code. It needed a couple of fixes in the codebase though, because previously, if a USHORT was participating in arithmetic with signed numbers, eg. "u + 1", the result would have been unsigned. With this change, it would be signed. The correct fix is to update the code to read "u + 1u". That said, I think about conditionally adding back the cast out to signed/unsigned, to facilitate better type deduction. But I couldn't think of a real situation where that would help with anything. So I didn't add. Here's what it was: template <typename Type2 = hb_conditional<hb_is_signed (Type), signed, unsigned>, hb_enable_if (sizeof (Type) < sizeof (Type2))> operator hb_type_identity_t<Type2> () const { return v; } https://github.com/harfbuzz/harfbuzz/pull/2875
Behdad Esfahbod f4f35a4d 2021-02-22T22:28:32 [constexpr] Use initializer instead of assignment
Behdad Esfahbod cc16b26e 2021-02-22T17:55:47 [constexpr] IntType See https://github.com/harfbuzz/harfbuzz/pull/2875
Behdad Esfahbod 8b2f9adf 2021-02-22T17:42:24 m Simplify Tag operator char*
Behdad Esfahbod 021a1725 2021-02-22T17:40:22 Merge pull request #2874 from harfbuzz/constexpr2 Some more cleanup towards using constexpr to simplify our internal datastrcutures. https://github.com/harfbuzz/harfbuzz/pull/2874
Behdad Esfahbod b368a073 2021-02-22T17:23:53 [atomic] Remove IBM/AIX implementation The C++11 implementation shall be enough for everyone.
Behdad Esfahbod 52f91269 2021-02-22T17:22:09 [atomic] Remove Windows implementation Since we require C++11 now, there's no point to do a macro version check. Which means we don't hit the MSVC issue defining __cplusplus wrongly.
Behdad Esfahbod a666fe64 2020-06-29T10:43:49 [atomic] Comment
Behdad Esfahbod 3528a21e 2020-06-29T10:40:21 [atomic] Remove Apple implementation Continuation of https://github.com/harfbuzz/harfbuzz/pull/676
Behdad Esfahbod 140797d4 2020-06-29T03:51:09 [constexpr] hb_atomic_int_t
Behdad Esfahbod 2ec802b4 2020-06-29T03:48:38 [object] Simplify reference_count_t
Behdad Esfahbod 12a283d5 2021-02-22T12:50:41 m[ft] No need to use atomic ops for cached_x_scale We have added a mutex since, so no need for atomicity.
Behdad Esfahbod a3c35aee 2020-06-29T02:07:20 m Move HB_SCRIPT_MYANMAR_ZAWGYI
Behdad Esfahbod c55bf551 2020-06-29T02:04:16 Remove HB_CONST_FUNC and HB_PURE_FUNC They are not necessary for inline functions.