On Sun, 04 Jan 2015 11:44:58 +0100, Tavmjong Bah <[email protected]> wrote:
Hi, Both Inkscape and Mozilla have bug reports concerning an error in the feTurbulance random algorithm.[1][2] This bug results in squares being drawn for certain seed values. (Example[3]) There is a discussion of the problem on svg-developers.[4] The Inkscape bug report traces the problem to a divide by zero when both values in the fGradient table are zero which occurs for some seed values. A couple solutions are proposed in the comments. Tav [1] https://bugs.launchpad.net/inkscape/+bug/1406458 [2] https://bugzilla.mozilla.org/show_bug.cgi?id=862225 [3] https://launchpadlibrarian.net/193702227/turbulence-seed514.png [4] https://www.mail-archive.com/[email protected]/msg16062.html
See [5] for how it's currently handled in skia (used in Chrome/Opera). Since the gradient vector here is a degenerate case the normalize method sets (0,0) as the "normalized" result [6].
Looking at what Presto did, it seems it avoided the division by zero by checking if the divisor was zero, leaving the vector unchanged if so, which I think will also result in (0,0).
[5] https://skia.googlesource.com/skia/+/master/src/effects/SkPerlinNoiseShader.cpp#180
[6] https://skia.googlesource.com/skia/+/master/src/core/SkPoint.cpp#69 -- Erik Dahlstrom, Web Technology Developer, Opera Software Co-Chair, W3C SVG Working Group
