aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--gm/stroketext.cpp16
-rw-r--r--src/core/SkBitmapDevice.cpp5
2 files changed, 21 insertions, 0 deletions
diff --git a/gm/stroketext.cpp b/gm/stroketext.cpp
index 1791fea528..b9d56f10e4 100644
--- a/gm/stroketext.cpp
+++ b/gm/stroketext.cpp
@@ -8,6 +8,21 @@
#include "gm.h"
#include "SkCanvas.h"
+static void test_nulldev(SkCanvas* canvas) {
+ SkBitmap bm;
+ bm.setConfig(SkBitmap::kARGB_8888_Config, 30, 30);
+ // notice: no pixels mom! be sure we don't crash
+ // https://code.google.com/p/chromium/issues/detail?id=352616
+ SkCanvas c(bm);
+
+ SkBitmap src;
+ src.allocN32Pixels(10, 10);
+ src.eraseColor(SK_ColorRED);
+
+ // ensure we don't crash
+ c.writePixels(src, 0, 0);
+}
+
static void draw_text_stroked(SkCanvas* canvas, const SkPaint& paint) {
SkPaint p(paint);
SkPoint loc = { 20, 450 };
@@ -44,6 +59,7 @@ protected:
}
virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
+ if (true) { test_nulldev(canvas); }
SkPaint paint;
paint.setAntiAlias(true);
diff --git a/src/core/SkBitmapDevice.cpp b/src/core/SkBitmapDevice.cpp
index 8524f0b72b..724f17fe51 100644
--- a/src/core/SkBitmapDevice.cpp
+++ b/src/core/SkBitmapDevice.cpp
@@ -352,6 +352,11 @@ static bool write_pixels(const SkImageInfo& dstInfo, void* dstPixels, size_t dst
bool SkBitmapDevice::onWritePixels(const SkImageInfo& srcInfo, const void* srcPixels,
size_t srcRowBytes, int x, int y) {
+ // since we don't stop creating un-pixeled devices yet, check for no pixels here
+ if (NULL == fBitmap.getPixels()) {
+ return false;
+ }
+
SkImageInfo dstInfo = fBitmap.info();
dstInfo.fWidth = srcInfo.width();
dstInfo.fHeight = srcInfo.height();