8 Commits

Author SHA1 Message Date
Raph Levien
055b8c8cda Add error logging on invalid cmap - DO NOT MERGE
am: ac3b9bc4ea

* commit 'ac3b9bc4ea57584b6b98307dc505567beaeedab1':
  Add error logging on invalid cmap - DO NOT MERGE
2016-02-17 23:43:26 +00:00
Raph Levien
ac3b9bc4ea Add error logging on invalid cmap - DO NOT MERGE
This patch logs instances of fonts with invalid cmap tables.

Bug: 25645298
Bug: 26413177
Change-Id: I183985e9784a97a2b4307a22e036382b1fc90e5e
2016-02-12 17:09:01 +00:00
Raph Levien
8d10d3a0f9 Reject fonts with invalid ranges in cmap
am: f5d2fa97bb

* commit 'f5d2fa97bbdbf5075e293fb641cd2e5dbaa29cfa':
  Reject fonts with invalid ranges in cmap
2016-01-15 21:28:10 +00:00
Raph Levien
f5d2fa97bb Reject fonts with invalid ranges in cmap
A corrupt or malicious font may have a negative size in its cmap
range, which in turn could lead to memory corruption. This patch
detects the case and rejects the font, and also includes an assertion
in the sparse bit set implementation if we missed any such case.

External issue:
https://code.google.com/p/android/issues/detail?id=192618

Bug: 26413177
Change-Id: Icc0c80e4ef389abba0964495b89aa0fae3e9f4b2
2016-01-07 21:39:25 +00:00
Raph Levien
fa84e49423 Avoid integer overflows in parsing fonts
am: 1fd1c39021

* commit '1fd1c390217da22a54b49e9a91bc79b0323e6a73':
  Avoid integer overflows in parsing fonts
2015-12-08 19:17:40 +00:00
Raph Levien
1fd1c39021 Avoid integer overflows in parsing fonts
A malformed TTF can cause size calculations to overflow. This patch
checks the maximum reasonable value so that the total size fits in 32
bits. It also adds some explicit casting to avoid possible technical
undefined behavior when parsing sized unsigned values.

Bug: 25645298
Change-Id: Id4716132041a6f4f1fbb73ec4e445391cf7d9616
(cherry picked from commit 371e5dbb3f61fbfb653eed4fa2e452f8978419ff)
2015-12-07 17:58:12 +00:00
Raph Levien
92e8cc7071 Silently ignore invalid rangeOffset values
Some fonts contain a cmap segment for char 0xffff that contains an
invalid rangeOffset. This was rejected by the existing code, which
means the font is considered to have empty Unicode coverage. This patch
just discards the invalid segment (consistent with OpenType Sanitizer),
making the custom font display.

Bug: 18106256
Change-Id: Icc8616a3030f80e62db906332be64d434ae72ea2
2014-10-23 23:31:42 +00:00
Raph Levien
c1a6032ce6 Initial commit of Minikin library
This is the initial draft of Minikin, a library intended to perform text
layout functions. This version does basic weight selection and font runs
for scripts, and also has a simple renderer for drawing into bitmaps,
but is lacking measurement, line breaking, and a number of other
important features. It also lacks caching and other performance
refinements.

Change-Id: I789a2e47d11d71202dc84b4751b51a5e2cd9c451
2013-04-25 12:23:57 -07:00