Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6)

Unified Diff: third_party/ots/docs/DesignDoc.md

Issue 775893002: Updating OTS repo from https://github.com/khaledhosny/ots.git (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Updating with 4800 warning fix Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/ots/README.chromium ('k') | third_party/ots/docs/HowToTest.md » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/ots/docs/DesignDoc.md
diff --git a/third_party/ots/docs/DesignDoc.md b/third_party/ots/docs/DesignDoc.md
new file mode 100644
index 0000000000000000000000000000000000000000..ffcc03522f86949eb0ec16ed2c0caf46e99fbe4f
--- /dev/null
+++ b/third_party/ots/docs/DesignDoc.md
@@ -0,0 +1,136 @@
+What's OTS?
+===========
+
+Sanitiser for OpenType (OTS) is a small library which parses OpenType files
+(usually from `@font-face`) and attempts to validate and sanitise them. This
+library is primarily intended to be used with Chromium. We hope this reduces
+the attack surface of the system font libraries.
+
+What the sanitiser does is as follows:
+
+1. Parses an original font. If the parsing fails, OTS rejects the original
+ font.
+2. Validates the parsed data structure. If the validation fails, it rejects the
+ original font as well.
+3. Creates a new font on memory by serializing the data structure, and we call
+ this "transcoding".
+
+By transcoding fonts in this way, it is ensured that:
+
+1. All information in an original font that OTS doesn't know or can't parse is
+ dropped from the transcoded font.
+2. All information in the transcoded font is valid (standard compliant).
+ Particularly 'length' and 'offset' values, that are often used as attack
+ vectors, are ensured to be correct.
+
+Supported OpenType tables
+=========================
+
+| Name | Mandatory table? | Supported by OTS? | Note |
+|--------|-----------------------------|-------------------|--------|
+| `sfnt` | Yes | Yes | Overlapped tables are not allowed; it is treated as a fatal parser error.|
+| `maxp` | Yes | Yes | |
+| `head` | Yes | Yes | |
+| `hhea` | Yes | Yes | |
+| `hmtx` | Yes | Yes | |
+| `name` | Yes | Yes | |
+| `OS/2` | Yes | Yes | |
+| `post` | Yes | Yes | |
+| `cmap` | Yes | Partialy | see below |
+| `glyf` | Yes, for TrueType fonts | Yes | TrueType bytecode is supported, but OTS does **not** validate it.|
+| `loca` | Yes, when glyf table exists | Yes | |
+| `CFF ` | Yes, for OpenType fonts | Yes | OpenType bytecode is also supported, and OTS **does** validate it.|
+| `cvt ` | No | Yes | Though this table is not mandatory, OTS can't drop the table from a transcoded font since it might be referred from other hinting-related tables. Errors on this table should be treated as fatal.|
+| `fpgm` | No | Yes | Ditto. |
+| `prep` | No | Yes | Ditto. |
+| `VDMX` | No | Yes | This table is important for calculating the correct line spacing, at least on Chromium Windows and Chromium Linux.|
+| `hdmx` | No | Yes | |
+| `gasp` | No | Yes | |
+| `VORG` | No | Yes | |
+| `LTSH` | No | Yes | |
+| `kern` | No | Yes | |
+| `GDEF` | No | Yes | |
+| `GSUB` | No | Yes | |
+| `GPOS` | No | Yes | |
+| `morx` | No | No | |
+| `jstf` | No | No | |
+| `vmtx` | No | Yes | |
+| `vhea` | No | Yes | |
+| `EBDT` | No | No | We don't support embedded bitmap strikes.|
+| `EBLC` | No | No | Ditto. |
+| `EBSC` | No | No | Ditto. |
+| `bdat` | No | No | Ditto. |
+| `bhed` | No | No | Ditto. |
+| `bloc` | No | No | Ditto. |
+| `DSIG` | No | No | |
+| All other tables | - | No | |
+
+Please note that OTS library does not parse "unsupported" tables. These
+unsupported tables never appear in a transcoded font.
+
+Supported cmap formats
+----------------------
+
+The following 9 formats are supported:
+
+* "MS Unicode" (platform 3 encoding 1 format 4)
+ * BMP
+* "MS UCS-4" (platform 3 encoding 10 format 12)
+* "MS UCS-4 fallback" (platform 3 encoding 10 format 13)
+* "MS Symbol" (platform 3 encoding 0 format 4)
+* "Mac Roman" (platform 1 encoding 0 format 0)
+ * 1-0-0 format is supported while 1-0-6 is not.
+* "Unicode default" format (platform 0 encoding 0 format 4)
+ * treated as 3-1-4 format
+* "Unicode 1.1" format (platform 0 encoding 1 format 4)
+ * ditto
+* "Unicode 2.0+" format (platform 0 encoding 3 format 4)
+* "Unicode UCS-4" format (platform 0 encoding 4 format 12)
+ * treated as 3-10-12 format
+* Unicode Variation Sequences (platform 0 encoding 5 format 14)
+
+All other types of subtables are not supported and do not appear in transcoded fonts.
+
+Validation strategies
+=====================
+
+With regards to 8 mandatory tables, glyph-related tables (`glyf`, `loca` and `CFF`),
+and hinting-related tables (`cvt`, `prep`, and `fpgm`):
+
+* If OTS finds table-length, table-offset, or table-alignment errors, in other
+ words it cannot continue parsing, OTS treats the error as fatal.
+* If OTS finds simple value error which could be automatically fixed (e.g.,
+ font weight is greater than 900 - that's undefined), and if the error is
+ considered common among non-malicious fonts, OTS rewrites the value and
+ continues transcoding.
+* If OTS finds a value error which is hard to fix (e.g., values which should be
+ sorted are left unsorted), OTS treats the error as fatal.
+
+With regards to optional tables (`VORG`, `gasp`, `hdmx`, `LTSH`, and `VDMX`):
+
+* If OTS finds table-length, table-offset, or table-alignment errors, OTS
+ treats the error as fatal.
+* If OTS finds other errors, it simply drops the table from a transcoded font.
+
+Files
+=====
+
+* include/opentype-sanitiser.h
+ * Declaration for the public API, `ots::Process()`.
+ * Definition of the `OTSStream` interface, a write-only memory stream.
+* include/ots-memory-stream.h
+ * Definition of the `MemoryStream` class which implements the `OTSStream`
+ interface above.
+* src/ots.h
+ * Debug macros.
+ * Definition of a `Buffer` class which is a read-only memory stream.
+* src/ots.cc
+ * Definition of the `ots::Process()` function.
+ * `sfnt` table parser.
+* test/\*.cc
+ * test tools. see test/README for details.
+
+Known issues
+============
+
+Please check the [issues](https://github.com/khaledhosny/ots/issues) page.
« no previous file with comments | « third_party/ots/README.chromium ('k') | third_party/ots/docs/HowToTest.md » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698