diff options
-rw-r--r-- | src/gpu/SkGr.cpp | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/src/gpu/SkGr.cpp b/src/gpu/SkGr.cpp index 3cca52f2b0..50c7cc25a1 100644 --- a/src/gpu/SkGr.cpp +++ b/src/gpu/SkGr.cpp @@ -23,6 +23,7 @@ #include "SkColorFilter.h" #include "SkConfig8888.h" #include "SkData.h" +#include "SkImageInfoPriv.h" #include "SkMaskFilter.h" #include "SkMessageBus.h" #include "SkMipMap.h" @@ -125,6 +126,10 @@ GrTexture* GrUploadPixmapToTexture(GrContext* ctx, const SkPixmap& pixmap, SkBud SkPixmap tmpPixmap; SkBitmap tmpBitmap; + if (!SkImageInfoIsValid(pixmap.info())) { + return nullptr; + } + const GrCaps* caps = ctx->caps(); GrSurfaceDesc desc = GrImageInfoToSurfaceDesc(pixmap.info(), *caps); @@ -199,6 +204,10 @@ GrTexture* GrGenerateMipMapsAndUploadToTexture(GrContext* ctx, const SkBitmap& b ? SkDestinationSurfaceColorMode::kGammaAndColorSpaceAware : SkDestinationSurfaceColorMode::kLegacy; + if (!SkImageInfoIsValid(bitmap.info())) { + return nullptr; + } + GrSurfaceDesc desc = GrImageInfoToSurfaceDesc(bitmap.info(), *ctx->caps()); // We don't support Gray8 directly in the GL backend, so fail-over to GrUploadBitmapToTexture. @@ -210,11 +219,6 @@ GrTexture* GrGenerateMipMapsAndUploadToTexture(GrContext* ctx, const SkBitmap& b return nullptr; } - SkASSERT(sizeof(int) <= sizeof(uint32_t)); - if (bitmap.width() < 0 || bitmap.height() < 0) { - return nullptr; - } - SkAutoPixmapUnlock srcUnlocker; if (!bitmap.requestLock(&srcUnlocker)) { return nullptr; @@ -264,6 +268,10 @@ GrTexture* GrGenerateMipMapsAndUploadToTexture(GrContext* ctx, const SkBitmap& b GrTexture* GrUploadMipMapToTexture(GrContext* ctx, const SkImageInfo& info, const GrMipLevel* texels, int mipLevelCount) { + if (!SkImageInfoIsValid(info)) { + return nullptr; + } + const GrCaps* caps = ctx->caps(); return ctx->textureProvider()->createMipMappedTexture(GrImageInfoToSurfaceDesc(info, *caps), SkBudgeted::kYes, texels, |