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
This commit is contained in:
parent
13874c1ad8
commit
0d30c51c6c
@ -8,6 +8,21 @@
|
|||||||
#include "gm.h"
|
#include "gm.h"
|
||||||
#include "SkCanvas.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) {
|
static void draw_text_stroked(SkCanvas* canvas, const SkPaint& paint) {
|
||||||
SkPaint p(paint);
|
SkPaint p(paint);
|
||||||
SkPoint loc = { 20, 450 };
|
SkPoint loc = { 20, 450 };
|
||||||
@ -44,6 +59,7 @@ protected:
|
|||||||
}
|
}
|
||||||
|
|
||||||
virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
|
virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
|
||||||
|
if (true) { test_nulldev(canvas); }
|
||||||
SkPaint paint;
|
SkPaint paint;
|
||||||
paint.setAntiAlias(true);
|
paint.setAntiAlias(true);
|
||||||
|
|
||||||
|
@ -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,
|
bool SkBitmapDevice::onWritePixels(const SkImageInfo& srcInfo, const void* srcPixels,
|
||||||
size_t srcRowBytes, int x, int y) {
|
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();
|
SkImageInfo dstInfo = fBitmap.info();
|
||||||
dstInfo.fWidth = srcInfo.width();
|
dstInfo.fWidth = srcInfo.width();
|
||||||
dstInfo.fHeight = srcInfo.height();
|
dstInfo.fHeight = srcInfo.height();
|
||||||
|
Loading…
Reference in New Issue
Block a user