David Benjamin
23a34adec3
Fix undefined type-punning when loading/storing words
...
Despite common practice, type-punning integer types out of buffers is
undefined in C and C++. It's both a strict aliasing violation on access,
and if the pointer isn't aligned, an alignment violation on cast. Being
undefined, the compiler is allowed to arbitrarily miscompile the code
when we rely on it.
Instead, the two legal ways to pull a uint32_t out of a buffer are to
either use memcpy, or load byte by byte and use shifts. In both cases,
a good compiler should be smart enough to recognize what we're doing and
generate reasonable code. Since there was already fallback code for the
latter (for a middle-endian architecture?), I went ahead and switched to
that.
This change is needed to fix UBSan violations in Chromium.
2023-10-26 10:16:05 -04:00
Garret Rieger
62ae7a4c1e
Add woff2 encoder/decoder support for overlapSimpleBitmap.
...
overlapSimpleBitmap is a new field in the transformed glyf table (https://www.w3.org/TR/WOFF2/#glyf_table_format ). It allows the overlap simple flag set on glyphs in the original font to be saved into the woff2 encoding.
2022-03-29 13:49:27 -07:00
Garret Rieger
3831354113
[subset] Check for overflow when decoding glyf.
2018-05-31 17:54:06 -07:00
Rod Sheeter
677800fa54
Fix woff2_compress fuzzer bugs
2017-10-13 13:12:55 -07:00
Frédéric Wang
9b5a53b1d7
Move public headers into a separate include/woff2 directory
...
This is a first step to make WOFF2 a shared library. Public headers are moved
in their own directory to make the public API clearer. This is similar to
the c/include/brotli/ directory in Brotli. "using" commands are also removed
from the public headers, so that callers won't have unexpected side effect
when including the files.
2017-10-05 12:04:24 -07:00
Rod Sheeter
53846e1861
Relicense as MIT
2017-10-04 16:12:46 -07:00
Rod Sheeter
679771f97a
Reject fonts with bounding boxes for empty glyphs
2017-08-23 14:03:23 -07:00
Rod Sheeter
e6579e6b12
Reject fonts with bad loca origLength or hmtx reserved bits set. Correct misplaced bracket in type conversion.
2017-08-23 12:59:55 -07:00
Rod Sheeter
2e09253456
Check for non-consecutive glyf/loca. Reject inconsistent xform flags on glyf/loca
2017-07-31 09:16:49 -07:00
Rod Sheeter
2c6c5846dd
reminder to update fuzzer on change
2017-07-31 09:14:44 -07:00
Rod Sheeter
a3c61ecad8
Add woff2_info
2017-07-27 09:37:28 -07:00
Garret Rieger
44ab8c45d7
Fix a crash bug in the woff2 decoder when totalSfntSize in the woff2 header is <= 0.
2017-07-19 17:35:57 -07:00
Garret Rieger
849bdb0d24
Fix a crash in the woff2 encoder when it encounters a loca table with a length of zero.
2017-07-19 17:35:13 -07:00
Garret Rieger
4f659ddbad
Allow endian-aware optimizations only on whitelisted CPUs.
2017-07-19 17:34:24 -07:00
Garret Rieger
12141fdaf2
Support tables with 0 length (which previously failed in multiple places).
2017-07-19 17:32:38 -07:00
rsheeter
cdd19711f4
Merge branch 'master' into master
2017-02-23 13:09:01 -08:00
Rod Sheeter
086bc06ce9
Avoid shadowing
2017-02-23 10:29:01 -08:00
Rod Sheeter
82a9f3afb2
Add check for size of head table to woff2 enc
2017-02-15 13:52:56 -08:00
Rod Sheeter
8109a2cc2b
Add fuzzers for consumption by https://github.com/google/oss-fuzz
2017-01-03 16:21:48 -08:00
Eugene Kliuchnikov
9db42c09e9
Roll new brotli version.
2016-12-06 11:14:53 +01:00
Rod Sheeter
63b8fb6d0d
Correct comment slightly
2016-09-21 14:48:52 -07:00
Rod Sheeter
58f6fe2aea
Add a comment to clarify which ConvertWOFF2ToTTF should be preferred
2016-09-21 14:35:34 -07:00
Khaled Hosny
cdd850ef52
Don’t ignore write failure
...
Makes it easy to find the source of the problems than failing later.
2016-08-09 15:59:50 +02:00
Rod Sheeter
afbecce5ff
Fix TTC detection, based on findings by libFuzzer
2016-05-25 08:53:43 -07:00
Rod Sheeter
8f3ff26c37
Fix an out of bounds access found by libFuzzer
2016-05-17 16:00:38 -07:00
Rod Sheeter
a15a8ab86b
Fixes for bugs uncovered by libFuzzer analysis. A write past buffer, a potential DOS by way of giant alloc, and an out of range access.
2016-05-06 13:14:42 -07:00
Rod Sheeter
9476664fd6
Fix bug where table could mismatch header vs data when allow_transforms was set false (not easily possible w/current tools)
2016-05-06 13:10:33 -07:00
Rod Sheeter
2bc6acf6df
Push fix for https://bugs.chromium.org/p/chromium/issues/detail?id=604649
2016-04-21 09:29:50 -07:00
Rod Sheeter
07cd303dd2
Update to latest brotli. Use size_t more consistently. Remove dead code.
2016-04-21 09:27:28 -07:00
Rod Sheeter
4e698b8c6c
Fix clang compile by adding <string> to woff2_out.h
2016-03-09 10:32:53 -08:00
Rod Sheeter
b220918cab
Stop trusting header totalSfntSize and glyf origLength
2016-03-08 12:30:08 -08:00
Steve Singer
9ba0580721
Fix issue #44
...
Use a static_cast instead of a reinterpert_cast so the code compiles
2016-02-10 22:25:06 -05:00
Rod Sheeter
d1efde9124
Update woff2_dec.cc range checking
2016-02-04 08:24:36 -08:00
Rod Sheeter
bdf886a06b
Allow WOFF2Params to specify no transformations at all
2016-01-28 11:36:18 -08:00
Rod Sheeter
14f4cb67ec
Tweaks requested by @fred-wang to help Mozilla build
2016-01-28 11:34:31 -08:00
Rod Sheeter
c817c969bf
hmtx optimization decoding. never encodes hmtx optimized as yet; need a cli param.
2016-01-20 14:10:02 -08:00
Kunihiko Sakamoto
965d077bde
Fix signed/unsigned comparison warnings on MSVC
2015-11-17 18:20:03 +09:00
rsheeter
6dbcb5844e
Merge pull request #34 from khaledhosny/master
...
Don’t print to stderr unless a standalone binary
2015-10-28 10:28:58 -07:00
Rod Sheeter
fde07429be
Be more accepting of fonts with unusual sets of tables
2015-10-26 07:16:42 -07:00
Khaled Hosny
17ed658d0a
Don’t print to stderr unless a standalone binary
...
We will use woff2 code from OTS and it is undesirable for a library to
print messages to stderr.
2015-08-28 01:30:03 +02:00
Rod Sheeter
eeec219f20
Only reorder the table directory
2015-07-27 08:47:58 -07:00
Khaled Hosny
208c8f854e
Kill kWoff2FlagsContinueStream
...
There is only a single data stream for all the compressed tables, but
the code was originally written for separately compressed tables then
retrofitted, so this is an attempt to streamline it a bit.
2015-07-15 11:25:52 +02:00
Rod Sheeter
4e3bb3418f
Merge PR #16 (reject composite glyphs w/o bbox), slightly modified to match recent code updates (mostly just adding branch predictions)
2015-07-14 10:12:40 -07:00
Rod Sheeter
ea4c87a2c5
Updates from internal copy. Better branch prediction, ability to set Brotli quality on ConvertTTFToWOFF2
2015-07-13 09:08:04 -07:00
rsheeter
e3ea2285a7
Merge pull request #25 from khaledhosny/invalid-base128
...
Reject UIntBase128 with leading zeros
2015-06-29 15:30:13 -04:00
Khaled Hosny
f43ad22271
Reject UIntBase128 with leading zeros
...
Fixes #23 .
2015-06-25 06:53:21 +02:00
Khaled Hosny
c54533f47f
Fix compiler warning on Mac OS X
...
warning: format specifies type 'unsigned long' but the argument has type
'uint64_t' (aka 'unsigned long long') [-Wformat]
2015-06-25 03:32:08 +02:00
Khaled Hosny
c3d35ba2e1
Fix building with FONT_COMPRESSION_DEBUG
2015-05-01 01:01:11 +03:00
Rod Sheeter
cbd682fcc9
remove comment that has been addressed
2015-04-22 15:55:53 -07:00
rsheeter
56e5e74d34
Merge pull request #13 from khaledhosny/bbox
...
Fix simple glyph bounding box handling
2015-04-22 15:52:54 -07:00