Index: third_party/ots/test/README |
diff --git a/third_party/ots/test/README b/third_party/ots/test/README |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f634e069592de9239bd84ed04c06c3926be1ad5d |
--- /dev/null |
+++ b/third_party/ots/test/README |
@@ -0,0 +1,243 @@ |
+------------------------------------------------------------------------------ |
+ot-sanitise - TTF/OTF font validator/transcoder |
+ |
+Description: |
+ ot-sanitise is a program which validates and/or 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 |
+ 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)! |
+ $ |
+------------------------------------------------------------------------------ |