>But even in HarfBuzz and CoreText, there are hard limits on the recursion depth. HarfBuzz sets its limit to 6. Therefore, the above example will only work on strings of length 7 or fewer. HarfBuzz is open source, though, so I simply used a custom build of HarfBuzz which bumps up this limit to 4 billion. This let me recurse to my heart’s content. A limit of 6 is probably a good thing; I don’t think users generally expect their text engines to be running arbitrary computation during layout.
GSUB handling is done by a library called a text shaper. Examples of libraries that do shaping include the cross-platform HarfBuzz, Windows DirectWrite, and macOS Core Graphics/Core Text.
It's not arbitrary code execution, just a toy observation about the specification. Additionally, 1) as noted, none of the font rendering libraries used were capable of recursion without the author's modifications, 2) in a web context, Javascript is unable to access information about actual glyphs rendered or other "font-internal" calculations.
If anything, exposing glyph data to the web API would be a bigger problem for fingerprinting, and probably expose some sort of user browsing history snooping flaw...
I think this is extremely interesting. Not to dismiss the author's work, but merely performing addition is far from Turing complete. Addition is primitive recursive, a much smaller class of functions than say, generally recursive. Although in this case I have no reason to doubt that GSUB isn't Turing complete, because recursive symbol substitution is powerful enough.
mLuby|7 years ago
Truly, Zalgo waits just beyond the wall.
zamalek|7 years ago
benj111|7 years ago
Could someone explain at what level this is happening. What classes of software/libraries are affected?
pcwalton|7 years ago
paradroid|7 years ago
XaspR8d|7 years ago
If anything, exposing glyph data to the web API would be a bigger problem for fingerprinting, and probably expose some sort of user browsing history snooping flaw...
kccqzy|7 years ago
ericsoderstrom|7 years ago
https://www.toothycat.net/~hologram/Turing/HowItWorks.html
zwkrt|7 years ago
peter_d_sherman|7 years ago
This can be generalized as: Pattern Matching = if statement.
I don't know nor can I prove that that's true under all circumstances, however...
But, an interesting article.
empath75|7 years ago
0_gravitas|7 years ago