Commit Graph

3846 Commits

Author SHA1 Message Date
Behdad Esfahbod 8cb41cb950 Merge pull request #76 from cpeterso/cpeterso/Wunused-function
Add #ifdef HB_USE_ATEXIT to fix -Wunused-function warnings
2015-01-04 20:32:18 -08:00
Chris Peterson fb85d618f5 Add #ifdef HB_USE_ATEXIT to fix -Wunused-function warnings 2015-01-04 19:31:10 -08:00
Behdad Esfahbod 365c03fc2b Merge pull request #75 from cpeterso/cpeterso/Wunused-value
Fix hb_atomic_ptr_cmpexch -Wunused-value warnings
2015-01-03 21:55:30 -08:00
Chris Peterson d1897a98d8 Fix hb_atomic_ptr_cmpexch -Wunused-value warnings 2015-01-03 19:46:19 -08:00
Behdad Esfahbod c36c4a9924 Add missing va_end()
Fixes https://github.com/behdad/harfbuzz/pull/74
2015-01-02 14:09:23 -08:00
Behdad Esfahbod f34aaba868 [ft] Don't set font ppem
For discussion see:

  http://lists.freedesktop.org/archives/harfbuzz/2012-April/001905.html

Over time we have had added NO_HINTING all over the place in hb-ft.  Finish it off.
Not setting ppem on hb-font disables get_contour_point() calls which is good anyway.

See comments in the commit.
2014-12-28 18:56:15 -08:00
Behdad Esfahbod 350f3a02ce [ft] Add hb_ft_face_create_referenced() and hb_ft_font_create_referenced()
When I originally wrote hb-ft, FreeType objects did not support reference
counting.  As such, hb_ft_face_create() and hb_ft_font_create() had a
"destroy" callback and client was responsible for making sure FT_Face is
kept around as long as the hb-font/face are alive.

However, since this was not clearly documented, some clienets didn't
correctly did that.  In particular, some clients assumed that it's safe
to destroy FT_Face and then hb_face_t.  This, indeed, used to work, until
45fd9424c7, which make face destroy access
font tables.

Now, I fixed that issue in 395b35903e since
the access was not needed, but the problem remains that not all clients
handle this correctly.  See:

  https://bugs.freedesktop.org/show_bug.cgi?id=86300

Fortunately, FT_Reference_Face() was added to FreeType in 2010, and so we
can use it now.  Originally I wanted to change hb_ft_face_create() and
hb_ft_font_create() to reference the face if destroy==NULL was passed in.
That would improve pretty much all clients, with little undesired effects.
Except that FreeType itself, when compiled with HarfBuzz support, calls
hb_ft_font_create() with destroy==NULL and saves the resulting hb-font on
the ft-face (why does it not free it immediately?).  Making hb-face
reference ft-face causes a cycling reference there.  At least, that's my
current understanding.

At any rate, a cleaner approach, even if it means all clients will need a
change, is to introduce brand new API.  Which this commit does.

Some comments added to hb-ft.h, hoping to make future clients make better
choices.

Fixes https://bugs.freedesktop.org/show_bug.cgi?id=75299
2014-12-28 17:59:28 -08:00
Behdad Esfahbod 9a3b74884b Remove redundant check for FT_Face_GetCharVariantIndex
We require FreeType >= 2.8.3.  This symbol was introduced earlier
than that.
2014-12-28 17:27:39 -08:00
Behdad Esfahbod 1226b2e930 Fix FreeType version check 2014-12-28 17:04:23 -08:00
Behdad Esfahbod affacf2f37 [ft] Open blob in READONLY mode
HB_MEMORY_MODE_READONLY_MAY_MAKE_WRITABLE is deprecated and fairly
useless now.
2014-12-28 16:20:31 -08:00
Behdad Esfahbod 395b35903e Avoid accessing layout tables at face destruction
"Fixes" https://bugs.freedesktop.org/show_bug.cgi?id=86300

Based on discussion someone else who had a similar issue, most probably
the user is releasing FT_Face before destructing hb_face_t / hb_font_t.
While that's a client bug, and while we can (and should) use FreeType
refcounting to help avoid that, it happens that we were accessing
the table when we didn't really have to.  Avoid that.
2014-12-28 16:03:26 -08:00
Behdad Esfahbod 7d5e7613ce Fail blob creation if length overflows or is too large
Fail if blob start plus length overflows; or if blob length
is greater than 2GB.  It takes a while for fonts to get to that
size.  In the mean time, it protects against bugs like this:

  http://www.icu-project.org/trac/ticket/11450

Also avoids some weird issues with 32bit vs 64bit systems
as we accept length as unsigned int.  As such, a length of
-1 will cause overflow on 32bit machines, but happily
accepted on a 64bit machine.  Avoid that.
2014-12-18 18:22:21 -08:00
Behdad Esfahbod d5a5052098 Assert that blob length doesn't overflow address.
This will crash now, if blob was created with wrong length.
Check for that coming next commit.
2014-12-18 18:09:41 -08:00
Behdad Esfahbod 66e37409b3 0.9.37 2014-12-17 12:09:17 -08:00
Behdad Esfahbod 093c520de5 [otlayout] Mark variables that are C arrays as opposed to OT::ArrayOf 2014-12-12 21:07:53 -08:00
Behdad Esfahbod 9df0a52030 [otlayout] Avoid invalid access with Context format 3 2014-12-12 20:54:28 -08:00
Behdad Esfahbod 295ef1dd52 [ot] Debug get_coverage 2014-12-12 20:43:18 -08:00
Behdad Esfahbod 00f6a8e334 [ot] Print format in dispatch trace 2014-12-12 20:36:49 -08:00
Behdad Esfahbod 5c7d6f02d7 Minor 2014-12-12 20:28:49 -08:00
Behdad Esfahbod 153beebba9 [ot] Make sure all toplevel tables have tableTag 2014-12-12 19:46:09 -08:00
Behdad Esfahbod 282b13f9b4 [sanitize] Improve debug output some more 2014-12-12 19:34:49 -08:00
Behdad Esfahbod 0766ee1f4e [sanitize] Improve debug output 2014-12-12 18:23:20 -08:00
Behdad Esfahbod e6f80fa104 [indic] Allow ZWJ/ZWNJ before SM
In Oriya, a ZWJ/ZWNJ might be added before candrabindu to encourage
or stop ligation of the candrabindu.  This is clearly specified in
the Unicode section on Oriya.  Allow it there.  Note that Uniscribe
doesn't allow this.

Micro tests added using Noto Sans Oriya draft.

No changes in numbers.  Currently at:

BENGALI: 353725 out of 354188 tests passed. 463 failed (0.130722%)
DEVANAGARI: 707307 out of 707394 tests passed. 87 failed (0.0122987%)
GUJARATI: 366349 out of 366457 tests passed. 108 failed (0.0294714%)
GURMUKHI: 60732 out of 60747 tests passed. 15 failed (0.0246926%)
KANNADA: 951190 out of 951913 tests passed. 723 failed (0.0759523%)
KHMER: 299070 out of 299124 tests passed. 54 failed (0.0180527%)
MALAYALAM: 1048147 out of 1048334 tests passed. 187 failed (0.0178378%)
ORIYA: 42320 out of 42329 tests passed. 9 failed (0.021262%)
SINHALA: 271662 out of 271847 tests passed. 185 failed (0.068053%)
TAMIL: 1091753 out of 1091754 tests passed. 1 failed (9.15957e-05%)
TELUGU: 970555 out of 970573 tests passed. 18 failed (0.00185457%)
2014-12-10 12:05:24 -08:00
Behdad Esfahbod c0e95abc5f 0.9.36 2014-11-20 14:42:24 -08:00
Behdad Esfahbod fde3e4a423 In hb_ot_collect_glyphs(), don't recurse to a lookup more than once
Otherwise, we might process a lookup thousands of times, with no
benefit.  This pathological case was hit by Noto Nastaliq Urdu Draft
in Firefox's code to determine whether space glyph is involved in
any GSUB/GPOS rules.  A test page is at http://behdad.org/urdu

See:
https://bugzilla.mozilla.org/show_bug.cgi?id=1090869
2014-10-29 11:23:08 -07:00
Behdad Esfahbod 5a5640d850 Move code around 2014-10-14 21:26:13 -07:00
Behdad Esfahbod 666b42f73b Move macros around
Fixes https://bugs.freedesktop.org/show_bug.cgi?id=84491
2014-10-14 21:24:59 -07:00
Behdad Esfahbod 5c87120b81 Fix misc warnings
Fixes https://github.com/behdad/harfbuzz/pull/51
2014-10-14 20:07:31 -07:00
Behdad Esfahbod a1f27ac3c4 Update test expectation for previous commit 2014-10-02 16:54:33 -04:00
Behdad Esfahbod 8afaf09687 [ft] Add NO_HINTING in a couple other places 2014-10-02 16:40:41 -04:00
Behdad Esfahbod 7228011411 [travis] Fix clang again 2014-10-01 18:58:43 -04:00
Behdad Esfahbod 406a020e52 [travis] Fail build if coveralls fails 2014-10-01 18:54:55 -04:00
Behdad Esfahbod a8aa20260d [travis] Only run coveralls under gcc 2014-10-01 18:48:40 -04:00
Behdad Esfahbod 5de0407337 Help clang with gcov 2014-10-01 18:18:25 -04:00
Behdad Esfahbod ef40ca8e5e [travis] Try to make coverage work with clang 2014-10-01 18:07:27 -04:00
Behdad Esfahbod 52784da17b [travis] Minor 2014-10-01 17:57:43 -04:00
Behdad Esfahbod f2c9005f51 Add README.md symlink to make github happy 2014-10-01 17:45:17 -04:00
Behdad Esfahbod 40987e8aac [travis] Re-enable clang 2014-10-01 17:44:30 -04:00
Behdad Esfahbod 5400ac476e Add build and coverage status links 2014-10-01 17:41:41 -04:00
Behdad Esfahbod 19360e0a56 [travis] Report matrix settings to help debugging 2014-10-01 17:35:03 -04:00
Behdad Esfahbod 9b89fc52f4 [travis] More coveralls 2014-10-01 17:20:31 -04:00
Behdad Esfahbod a68f2b62c1 [travis] Give coveralls a hand 2014-10-01 17:05:58 -04:00
Behdad Esfahbod 5194d647e1 [travis] Disable clang for now 2014-10-01 17:03:26 -04:00
Behdad Esfahbod 715f27f85f [test] Fixup test 2014-10-01 16:53:00 -04:00
Behdad Esfahbod 2a508ddae5 [travis] Another try at coveralls.io 2014-10-01 16:49:22 -04:00
Behdad Esfahbod dfe8078e5b [travis] First try to hookup coveralls.io code coverage tracking 2014-10-01 16:38:47 -04:00
Behdad Esfahbod 1b387571e4 [travis] Unbreak 2014-10-01 16:14:59 -04:00
Behdad Esfahbod e281ed360d [travis] Minor 2014-10-01 16:09:08 -04:00
Behdad Esfahbod c0b82ba32a Create ragel-generated files in srcdir 2014-10-01 14:24:07 -04:00
Behdad Esfahbod 79bbb10b0d Clean ragel-generated headers in maintainercleanfiles 2014-10-01 13:33:21 -04:00