| ------------------------------------------------------------------------------ | |
| 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)! | |
| $ | |
| ------------------------------------------------------------------------------ |