aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/core/SkBlitter.cpp8
-rw-r--r--tests/BlurTest.cpp16
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);
+}
+
///////////////////////////////////////////////////////////////////////////////////////////