1.0.13
Security
The CSS checks introduced in 1.0.10 can be bypassed two ways, both closed in this release (GHSA-ww22-4mqv-x5w3).
Comments split the tokens the checks look for. The checks decoded CSS escapes but never removed comments, so a comment dropped inside a token hid it, e.g. u/**/rl(https://host/x) or url(htt/**/ps://host/x). CSS is now normalized before the dangerous-token checks run: comments are stripped, escapes are decoded, then comments are stripped a second time, because decoding can synthesize a comment that was not there on the first pass (\2f\2a decodes to /*).
image-set() never matched any pattern. It loads an external resource without ever writing url(), so none of the existing patterns applied — and unlike the comment payloads, browsers do fetch it. Both image-set() and -webkit-image-set() are now covered, while relative references still pass.
Whitespace is deliberately left alone, since it is equally inert to browsers and collapsing it would risk rejecting legitimate multi-line CSS. Adds 9 regression cases; suite is green at 80 tests / 144 assertions.
Anyone embedding untrusted SVG or HTML should update. Grav users should take the next Grav release, which bundles this version.