neuroplast.ioHuman-machine interface research

goldmark

github.com/yuin/goldmark · MIT

For hotty.neuroplast.io

1 patch on v1.8.6. HOTTY's website is a terminal program that runs in the browser: Go, compiled to WebAssembly with TinyGo. It renders Markdown with goldmark, and goldmark v1 compiles regular expressions when its packages are initialized, which crashes a TinyGo WebAssembly program before main. We carry the fix until a goldmark release the site can use no longer compiles them.

goldmark runs on TinyGo's WebAssembly targets

Upstream fit: yes · patch 0001

What it changes: util.FindEmailIndex scans an e-mail address's domain by hand, as goldmark v2's parser does, and the linkify extension finds URLs and www. links with a scanner instead of its two default regexps. The scanner finds what the patterns found, and a test checks it against them on 300,000 generated lines. WithLinkifyURLRegexp and WithLinkifyWWWRegexp still take a pattern; only the defaults are gone.

Why we carry it: goldmark compiled those patterns when its packages were initialized. Their {0,61} and {1,256} repeats nest deep enough to overflow the fixed 64 KB goroutine stacks of TinyGo's WebAssembly targets, so HOTTY's website, hotty.neuroplast.io, crashed before main (tinygo#3258).

For upstream: yes. goldmark v2 already scans e-mail domains this way (ea86b6d5); this does it in v1 too, and for linkify's defaults, with no change to what is found. Every program that imports goldmark stops paying to compile the patterns at startup.


neuroplast.io · Modding · github.com/neuroplastio

Starting the terminal…