| Index: src/effects/SkMatrixConvolutionImageFilter.cpp
|
| diff --git a/src/effects/SkMatrixConvolutionImageFilter.cpp b/src/effects/SkMatrixConvolutionImageFilter.cpp
|
| index cac30e6a491853ab9907a34cd3df68ba2fa52736..4864aec65aefd60798df0062a82465521bb9f601 100644
|
| --- a/src/effects/SkMatrixConvolutionImageFilter.cpp
|
| +++ b/src/effects/SkMatrixConvolutionImageFilter.cpp
|
| @@ -59,18 +59,20 @@ SkMatrixConvolutionImageFilter::SkMatrixConvolutionImageFilter(
|
|
|
| SkMatrixConvolutionImageFilter::SkMatrixConvolutionImageFilter(SkFlattenableReadBuffer& buffer)
|
| : INHERITED(buffer) {
|
| + // We need to be able to read at most SK_MaxS32 bytes, so divide that
|
| + // by the size of a scalar to know how many scalars we can read.
|
| + static const int32_t kMaxSize = SK_MaxS32 / sizeof(SkScalar);
|
| fKernelSize.fWidth = buffer.readInt();
|
| fKernelSize.fHeight = buffer.readInt();
|
| if ((fKernelSize.fWidth >= 1) && (fKernelSize.fHeight >= 1) &&
|
| // Make sure size won't be larger than a signed int,
|
| // which would still be extremely large for a kernel,
|
| // but we don't impose a hard limit for kernel size
|
| - (SK_MaxS32 / fKernelSize.fWidth >= fKernelSize.fHeight)) {
|
| - uint32_t size = fKernelSize.fWidth * fKernelSize.fHeight;
|
| + (kMaxSize / fKernelSize.fWidth >= fKernelSize.fHeight)) {
|
| + size_t size = fKernelSize.fWidth * fKernelSize.fHeight;
|
| fKernel = SkNEW_ARRAY(SkScalar, size);
|
| - uint32_t readSize = buffer.readScalarArray(fKernel);
|
| - SkASSERT(readSize == size);
|
| - buffer.validate(readSize == size);
|
| + SkDEBUGCODE(bool success =) buffer.readScalarArray(fKernel, size);
|
| + SkASSERT(success);
|
| } else {
|
| fKernel = 0;
|
| }
|
|
|