|
7a2eda78
|
2021-03-29T17:32:29
|
|
Move code around
|
|
bcb57dcc
|
2021-03-29T17:31:09
|
|
[sanitize] Add short-circuit to ArrayOfM1
Like the sibling ArrayOf types.
|
|
52df6b9f
|
2021-03-29T16:17:27
|
|
[subset] check for set insertion success.
|
|
c6adb90a
|
2021-03-29T16:08:44
|
|
[subset] fix nullptr deref.
|
|
cdba5d44
|
2021-03-29T14:23:59
|
|
[subset] fix incorrect handling of return value in check_success in the error case.
|
|
9a3537e5
|
2021-03-29T14:34:24
|
|
[subset] invert err() return value. Undo previous change to check_success.
|
|
05e845c4
|
2021-03-29T16:02:10
|
|
Make previous commit gcc-only
|
|
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()".
|
|
95230e29
|
2021-03-18T17:41:25
|
|
[subset] support subsetting GSUB8
|
|
d18915f9
|
2021-03-28T10:09:13
|
|
Reformat gen-tag-table.py
|
|
3c8273ab
|
2021-03-25T11:39:57
|
|
Check for alloc failures on the gsub/gpos_langsys maps in subset plan creation.
|
|
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.
|
|
46bf03d6
|
2021-03-18T14:35:36
|
|
[subset] add NODISCARD to error checking methods on serializer.
|
|
3827a3eb
|
2021-03-18T11:20:03
|
|
[subset] rename serializer::set_error() to err().
|
|
f561fa6e
|
2021-03-18T11:13:47
|
|
Change priority queue to use (priority, value) instead of (value, priority).
|
|
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.
|
|
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.
|
|
6e9468fc
|
2020-11-09T16:52:36
|
|
[subset] cleanup memory leaks in the repacker.
|
|
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.
|
|
b9ecc742
|
2021-02-16T13:39:10
|
|
[subset] init offset_overflow in hb_serialize_context_t.
|
|
cf79fc34
|
2021-02-16T13:24:43
|
|
[subset] limit priority bumps to 16.
|
|
e2f14e81
|
2020-11-11T13:55:35
|
|
[subset] fix memory leaks in test-repacker.
|
|
d3e2ba7c
|
2020-11-11T13:50:18
|
|
[subset] comment cleanup in hb-repacker.hh
|
|
832f2b59
|
2020-11-10T16:15:37
|
|
[subset] Refactor _subset () to reduce nesting and eliminate the use of 'goto'.
|
|
bb5c80a7
|
2020-11-10T14:11:57
|
|
[subset] add error tracking to the repacker.
Also check for allocation failures as needed.
|
|
b452b2c7
|
2020-11-06T15:37:05
|
|
[subset] refactor repacker graph to cache edge count and distances of vertices.
|
|
75414e82
|
2020-11-05T16:39:23
|
|
[subset] Add table duplication overflow resolution.
|
|
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.
|
|
519ae966
|
2020-11-05T11:22:16
|
|
[subset] switch sort_shortest_distance() to use priority queue.
|
|
5d3511e5
|
2020-11-05T10:34:26
|
|
[subset] Change compute_distances() to use a priority queue.
|
|
59ac0a0d
|
2020-11-05T10:29:56
|
|
[subset] Use priority for comparison in heap.
|
|
4c8dd41e
|
2020-11-05T09:21:25
|
|
[subset] re-write compute distances to use an array lookup for the distance map.
|
|
5c4e0ffd
|
2020-11-04T16:08:01
|
|
[subset] Add a basic priority queue datastructure (binary heap).
|
|
dd8e5d0e
|
2020-11-03T14:01:42
|
|
[subset] Only run the repacker for GSUB/GPOS.
|
|
aaa7873d
|
2020-11-02T16:16:27
|
|
[subset] add topological sort by closest distance via Dijkstra's algorithm.
|
|
8ebe5d73
|
2020-11-02T14:51:39
|
|
Implement will_overflow ().
|
|
6b1ea4cb
|
2020-10-30T12:16:26
|
|
[subset] hook up the repacker to run if offset overflows are encountered during subsetting.
|
|
f4c78cc7
|
2020-10-30T10:29:51
|
|
[subset] Implement Kahn's algo for topological sorting instead of BFS.
|
|
00f393dc
|
2020-10-29T14:58:34
|
|
[subset] finish up BFS sort implementation.
|
|
1584d3cb
|
2020-10-28T17:49:09
|
|
[subset] Start a proof of concept implementation of the GSUB/GPOS offset overflow resolver.
|
|
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.
|
|
0e1c0fa4
|
2021-01-12T10:17:14
|
|
[subset] optimize glyph closure method: step 5
add testcase and some fixes
|
|
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.
|
|
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
|
|
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
|
|
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
|
|
2df39bca
|
2021-03-16T14:20:49
|
|
[subset] don't allocate a set to use as a glyph filter for PairPosFormat2.
|
|
bb54e104
|
2021-03-16T13:19:26
|
|
[subset] Also filter class1 by coverage when collecting variation indices for PairPosFormat2.
|
|
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.
|
|
03538e87
|
2021-03-16T19:28:35
|
|
2.8.0
|
|
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.
|
|
8450f43a
|
2021-03-15T15:18:06
|
|
[buffer] HB_NODISCARD next_glyph()
|
|
f4bc7673
|
2021-03-15T14:54:45
|
|
[buffer] Implement copy_glyph() in terms of output_info()
|
|
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.
|
|
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.
|
|
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.
|
|
e6be9eb4
|
2021-03-15T14:12:10
|
|
[buffer] HB_NODISCARD output_info()
|
|
2a0dbb3e
|
2021-03-15T14:10:39
|
|
[buffer] HB_NODISCARD copy_glyph()
|
|
b05e5d9a
|
2021-03-15T14:08:08
|
|
[buffer] HB_NODISCARD next_glyphs()
|
|
4ae8aab8
|
2021-03-15T14:01:52
|
|
[buffer] HB_NODISCARD has_separate_output()
|
|
8d3701f5
|
2021-03-15T14:01:32
|
|
[buffer] HB_NODISCARD in_error()
|
|
41e05479
|
2021-03-15T14:00:00
|
|
[buffer] HB_NODISCARD shift_forward()
|
|
83b3784d
|
2021-03-15T13:59:14
|
|
[buffer] HB_NODISCARD make_room_for()
|
|
c355508a
|
2021-03-15T13:58:30
|
|
[buffer] HB_NODISCARD ensure_glyphs() / ensure_unicode()
|
|
bc22305b
|
2021-03-15T13:57:18
|
|
[buffer] HB_NODISCARD ensure_inplace()
|
|
cac6c86d
|
2021-03-15T13:46:54
|
|
[buffer] HB_NODISCARD move_to()
|
|
05d2d37f
|
2021-03-15T13:43:29
|
|
[buffer] HB_NODISCARD ensure()
|
|
d8028a07
|
2021-03-15T13:34:36
|
|
[buffer] HB_NODISCARD enlarge()
|
|
3f1998a0
|
2021-03-15T13:33:44
|
|
[buffer] HB_NODISCARD replace_glyph()
|
|
607979d1
|
2021-03-15T13:23:48
|
|
[buffer] HB_NODISCARD replace_glyphs()
|
|
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.
|
|
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
|
|
99767f93
|
2021-03-15T12:36:59
|
|
[hangul] Whitespace
|
|
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
|
|
e19de65e
|
2021-03-08T13:12:47
|
|
Update hb-ot-tag-table.hh (#2890)
|
|
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
|
|
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.
|
|
d351bbf0
|
2021-03-02T16:24:54
|
|
[Makefile] Remove unused variable HBNODISTHEADERS
Not sure what it was used for before.
|
|
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
|
|
2902529b
|
2021-03-02T15:05:22
|
|
[subset] Fix HB_TINY build
Fixes https://github.com/harfbuzz/harfbuzzjs/issues/34#issuecomment-789247723
|
|
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
|
|
486da35c
|
2021-02-23T13:58:14
|
|
m Add comments to IntType cast out operator
Okay, bots seem to be happy. Merging.
|
|
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
|
|
6c4bb608
|
2021-02-22T22:45:32
|
|
Fix narrowing errors with recent changes
|
|
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.
|
|
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
|
|
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
|
|
f4f35a4d
|
2021-02-22T22:28:32
|
|
[constexpr] Use initializer instead of assignment
|
|
cc16b26e
|
2021-02-22T17:55:47
|
|
[constexpr] IntType
See https://github.com/harfbuzz/harfbuzz/pull/2875
|
|
8b2f9adf
|
2021-02-22T17:42:24
|
|
m Simplify Tag operator char*
|
|
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
|
|
b368a073
|
2021-02-22T17:23:53
|
|
[atomic] Remove IBM/AIX implementation
The C++11 implementation shall be enough for everyone.
|
|
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.
|
|
a666fe64
|
2020-06-29T10:43:49
|
|
[atomic] Comment
|
|
3528a21e
|
2020-06-29T10:40:21
|
|
[atomic] Remove Apple implementation
Continuation of https://github.com/harfbuzz/harfbuzz/pull/676
|
|
140797d4
|
2020-06-29T03:51:09
|
|
[constexpr] hb_atomic_int_t
|
|
2ec802b4
|
2020-06-29T03:48:38
|
|
[object] Simplify reference_count_t
|
|
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.
|
|
a3c35aee
|
2020-06-29T02:07:20
|
|
m Move HB_SCRIPT_MYANMAR_ZAWGYI
|
|
c55bf551
|
2020-06-29T02:04:16
|
|
Remove HB_CONST_FUNC and HB_PURE_FUNC
They are not necessary for inline functions.
|