check for null-device pixels in onWritePixels, so we don't crash
https://code.google.com/p/chromium/issues/detail?id=352616
Review URL: https://codereview.chromium.org/196223013
git-svn-id: http://skia.googlecode.com/svn/trunk@13802 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/gm/stroketext.cpp b/gm/stroketext.cpp
index 1791fea..b9d56f1 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 @@
}
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 8524f0b..724f17f 100644
--- a/src/core/SkBitmapDevice.cpp
+++ b/src/core/SkBitmapDevice.cpp
@@ -352,6 +352,11 @@
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();