add helper to check for overflow
pre-CL to aid in changing the convention for when we overflow
Bug: skia:
Change-Id: I1e34a18fefb80187787a1c0c8ed7ee3516744d24
Reviewed-on: https://skia-review.googlesource.com/57103
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Reed <reed@google.com>
diff --git a/include/core/SkImageInfo.h b/include/core/SkImageInfo.h
index 50d068a..212d96e 100644
--- a/include/core/SkImageInfo.h
+++ b/include/core/SkImageInfo.h
@@ -332,6 +332,11 @@
return this->computeByteSize(this->minRowBytes());
}
+ // Returns true if the result of computeByteSize (or computeMinByteSize) overflowed
+ static bool ByteSizeOverflowed(size_t byteSize) {
+ return 0 == byteSize;
+ }
+
bool validRowBytes(size_t rowBytes) const {
uint64_t minRB = sk_64_mul(fWidth, this->bytesPerPixel());
return rowBytes >= minRB;
diff --git a/src/core/SkAutoPixmapStorage.cpp b/src/core/SkAutoPixmapStorage.cpp
index df0c0fa..47f41e7 100644
--- a/src/core/SkAutoPixmapStorage.cpp
+++ b/src/core/SkAutoPixmapStorage.cpp
@@ -37,7 +37,7 @@
size_t rb;
size_t size = AllocSize(info, &rb);
- if (0 == size) {
+ if (SkImageInfo::ByteSizeOverflowed(size)) {
return false;
}
void* pixels = sk_malloc_flags(size, 0);
diff --git a/src/core/SkBitmapCache.cpp b/src/core/SkBitmapCache.cpp
index 8d3991a..0fc0c9e 100644
--- a/src/core/SkBitmapCache.cpp
+++ b/src/core/SkBitmapCache.cpp
@@ -290,7 +290,7 @@
const size_t rb = info.minRowBytes();
size_t size = info.computeByteSize(rb);
- if (0 == size) {
+ if (SkImageInfo::ByteSizeOverflowed(size)) {
return nullptr;
}
diff --git a/src/core/SkMallocPixelRef.cpp b/src/core/SkMallocPixelRef.cpp
index 1086102..4a34d39 100644
--- a/src/core/SkMallocPixelRef.cpp
+++ b/src/core/SkMallocPixelRef.cpp
@@ -80,8 +80,8 @@
size_t size = 0;
if (!info.isEmpty() && rowBytes) {
size = info.computeByteSize(rowBytes);
- if (!size) {
- return nullptr; // overflow
+ if (SkImageInfo::ByteSizeOverflowed(size)) {
+ return nullptr;
}
}
#endif
diff --git a/src/image/SkImage.cpp b/src/image/SkImage.cpp
index 705efae..7e1b238 100644
--- a/src/image/SkImage.cpp
+++ b/src/image/SkImage.cpp
@@ -423,7 +423,7 @@
size_t rowBytes = info.minRowBytes();
size_t size = info.computeByteSize(rowBytes);
- if (size == 0) {
+ if (SkImageInfo::ByteSizeOverflowed(size)) {
return nullptr;
}
auto data = SkData::MakeUninitialized(size);
diff --git a/src/image/SkImage_Raster.cpp b/src/image/SkImage_Raster.cpp
index c576d9d..db91621 100644
--- a/src/image/SkImage_Raster.cpp
+++ b/src/image/SkImage_Raster.cpp
@@ -62,7 +62,7 @@
}
size_t size = info.computeByteSize(rowBytes);
- if (0 == size) {
+ if (SkImageInfo::ByteSizeOverflowed(size)) {
return false;
}