blob: c31f7ced8b165c6260966d7c776e81370d1523cf [file] [log] [blame]
------------------------------------------------------------------------------
ot-sanitise - TTF/OTF font transcoder
Description:
ot-sanitise is a program which validates and transcodes a truetype or
opentype font file using the OTS library:
transcoded_font = ValidateAndTranscode(original_font);
if (validation_error)
PrintErrorAndExit;
OutputToStdout(transcoded_font);
Usage:
$ ./ot-sanitise ttf_or_otf_file > transcoded_file
Example:
$ ./ot-sanitise sample.otf > transcoded_sample.otf
$ ./ot-sanitise malformed.ttf > transcoded_malformed.ttf
WARNING at ots/src/ots.cc:158: bad range shift
ERROR at ots/src/ots.cc:199 (bool<unnamed>::do_ots_process(ots::OpenTypeFile*, ots::OTSStream*, const uint8_t*, size_t))
Failed to sanitise file!
$
------------------------------------------------------------------------------
idempotent - TTF/OTF font transcoder (for OTS debugging)
Description:
idempotent is a program which validates and transcodes a truetype or opentype
font file using OTS. This tool transcodes the original font twice and then
verifies that the two transcoded fonts are identical:
t1 = ValidateAndTranscode(original_font);
if (validation_error)
PrintErrorAndExit;
t2 = ValidateAndTranscode(t1);
if (validation_error)
PrintErrorAndExit;
if (t1 != t2)
PrintErrorAndExit;
This tool is basically for OTS developers.
Usage:
$ ./idempotent ttf_or_otf_file
Example:
$ ./idempotent sample.otf
$ ./idempotent malformed.ttf
WARNING at ots/src/ots.cc:158: bad range shift
ERROR at ots/src/ots.cc:199 (bool<unnamed>::do_ots_process(ots::OpenTypeFile*, ots::OTSStream*, const uint8_t*, size_t))
Failed to sanitise file!
$
------------------------------------------------------------------------------
validator_checker - font validation checker
Description:
validator_checker is a program which is intended to validate malformed fonts.
If the program detects that the font is invalid, it prints "OK" and returns
with 0 (success). If it coulndn't detect any errors, the program then opens
the transcoded font and renders some characters using FreeType2:
transcoded_font = ValidateAndTranscode(malicious_font);
if (validation_error)
Print("OK");
OpenAndRenderSomeCharacters(transcoded_font); # may cause SIGSEGV
Print("OK");
If SEGV doesn't raise inside FreeType2 library, the program prints "OK" and
returns with 0 as well. You should run this tool under the catchsegv or
valgrind command so that you can easily verify that all transformed fonts
don't crash the library (see the example below).
Usage:
$ catchsegv ./validator_checker malicous_ttf_or_otf_file
Example:
$ for f in malformed/*.ttf ; do catchsegv ./validator-checker "$f" ; done
OK: the malicious font was filtered: malformed/1.ttf
OK: the malicious font was filtered: malformed/2.ttf
OK: FreeType2 didn't crash: malformed/3.ttf
OK: the malicious font was filtered: malformed/4.ttf
$
------------------------------------------------------------------------------
perf - performance checker
Description:
perf is a program which validates and transcodes a truetype or opentype font
file N times using OTS, then prints the elapsed time:
for (N times)
ValidateAndTranscode(original_font);
Print(elapsed_time_in_us / N);
Usage:
$ ./perf ttf_or_otf_file
Example:
$ ./perf sample.ttf
903 [us] sample.ttf (139332 bytes, 154 [byte/us])
$ ./perf sample-bold.otf
291 [us] sample-bold.otf (150652 bytes, 517 [byte/us])
------------------------------------------------------------------------------
side-by-side - font quality checker
Description:
side-by-side is a program which renders some characters (ASCII, Latin-1, CJK)
using both original font and transcoded font and checks that the two rendering
results are exactly equal.
The following Unicode characters are used during the test:
0x0020 - 0x007E // Basic Latin
0x00A1 - 0x017F // Latin-1
0x1100 - 0x11FF // Hangul
0x3040 - 0x309F // Japanese HIRAGANA letters
0x3130 - 0x318F // Hangul
0x4E00 - 0x4F00 // CJK Kanji/Hanja
0xAC00 - 0xAD00 // Hangul
This tool uses FreeType2 library.
Note: This tool doesn't check kerning (GPOS/kern) nor font substitution
(GSUB). These should be tested in Layout tests if necessary.
Usage:
$ ./side-by-side ttf_or_otf_file
Example:
$ ./side-by-side linux/kochi-gothic.ttf # no problem
$ ./side-by-side free/kredit1.ttf # this is known issue of OTS.
bitmap metrics doesn't match! (14, 57), (37, 45)
EXPECTED:
+#######*.
+##########+
.###+.#. .#.
*#* # #*
##. # ##
## # ##
## # ##
## #. ##
##. #. .##
##. #. .##
*#+ *+ +#*
*#+ *+ +#*
*#+ *+ +#*
*#+ *+ +#*
*#+ *+ *#*
*#+ ++ *#+
+#* +* *#+
+#* +* *#+
+#* +* *#+
+#* +* ##.
+#* +* ##.
.## .# ##
.## .# ##
.## .# ##
## # ##
## # ##
## # .##
## # .##
## .#+ +#*
## +######*
##.+#######*
*##########*
+##########+
#########*
.########
+####+
.*######*
+##*.*#####
.##+.#+ +#
*#* ## #+
##*### ##
###### ##
##+.##+ +##
## ##########
## +#########
## +########
*#. .########*
.#* #########.
+##########+
+*######*
ACTUAL:
.*##*+
+##+.##*.
.#* .##.+#*
*# ### *#+
#*######+ .*#+
#########*. +#*.
###########* +#*
*############+ *#+
+##############. .##.
*##############* +#*
+###############+ *#+
*###############+ .*#+
.###############*. +#*.
+###############* +#*
*###############+ *#+
.*###############+ .*#+
+###############*. +#*
+###############* **
*###############+ #+
.###############* ##
+############+ ##
+########* .##
.######. +###
+#####+ .*#..#
+#####* *###..#
*#####. +#######*
+#####+ .*########.
+#####* +#########*
*#####. +##########+
+#####+ *#########*.
.#####* +##########+
*#####. +##########*
+#####+ *#########*.
.#####* +##########+
*#####+ +##########*
.#*++#+ *#########*.
.#+ ## +##########+
****###+.##########*
##################.
###+ *#########+
## +########*
*#+ *########.
##.#######+
+#######*
*###*.
Glyph mismatch! (file: free/kredit1.ttf, U+0021, 100pt)!
$
------------------------------------------------------------------------------