diff options
-rw-r--r-- | src/core/SkBlitter.cpp | 8 | ||||
-rw-r--r-- | tests/BlurTest.cpp | 16 |
2 files changed, 18 insertions, 6 deletions
diff --git a/src/core/SkBlitter.cpp b/src/core/SkBlitter.cpp index 6901511d4e..4bbd80d93f 100644 --- a/src/core/SkBlitter.cpp +++ b/src/core/SkBlitter.cpp @@ -715,11 +715,7 @@ public: } } - ~Sk3DShaderContext() override { - if (fProxyContext) { - fProxyContext->~Context(); - } - } + ~Sk3DShaderContext() override = default; void set3DMask(const SkMask* mask) override { fMask = mask; } @@ -790,7 +786,7 @@ public: private: // Unowned. const SkMask* fMask; - // Memory is unowned, but we need to call the destructor. + // Memory is unowned. Context* fProxyContext; SkPMColor fPMColor; diff --git a/tests/BlurTest.cpp b/tests/BlurTest.cpp index ba63f01cf4..6c5ef269d7 100644 --- a/tests/BlurTest.cpp +++ b/tests/BlurTest.cpp @@ -15,6 +15,8 @@ #include "SkMath.h" #include "SkPaint.h" #include "SkPath.h" +#include "SkPerlinNoiseShader.h" +#include "SkSurface.h" #include "Test.h" #if SK_SUPPORT_GPU @@ -651,4 +653,18 @@ DEF_TEST(BlurredRRectNinePatchComputation, reporter) { } +// https://crbugs.com/787712 +DEF_TEST(EmbossPerlinCrash, reporter) { + SkPaint p; + + static constexpr SkEmbossMaskFilter::Light light = { + { 1, 1, 1 }, 0, 127, 127 + }; + p.setMaskFilter(SkEmbossMaskFilter::Make(1, light)); + p.setShader(SkPerlinNoiseShader::MakeFractalNoise(1.0f, 1.0f, 2, 0.0f)); + + sk_sp<SkSurface> surface = SkSurface::MakeRasterN32Premul(100, 100); + surface->getCanvas()->drawPaint(p); +} + /////////////////////////////////////////////////////////////////////////////////////////// |