| Index: src/core/SkRegion.cpp
|
| diff --git a/src/core/SkRegion.cpp b/src/core/SkRegion.cpp
|
| index 02994bffb0e96d50b64c204315673d024f018528..59af1c2f7a87686b6e9c6c39ab19d27254c967c4 100644
|
| --- a/src/core/SkRegion.cpp
|
| +++ b/src/core/SkRegion.cpp
|
| @@ -1100,9 +1100,9 @@ bool SkRegion::op(const SkRegion& rgna, const SkRegion& rgnb, Op op) {
|
|
|
| #include "SkBuffer.h"
|
|
|
| -uint32_t SkRegion::writeToMemory(void* storage) const {
|
| +size_t SkRegion::writeToMemory(void* storage) const {
|
| if (NULL == storage) {
|
| - uint32_t size = sizeof(int32_t); // -1 (empty), 0 (rect), runCount
|
| + size_t size = sizeof(int32_t); // -1 (empty), 0 (rect), runCount
|
| if (!this->isEmpty()) {
|
| size += sizeof(fBounds);
|
| if (this->isComplex()) {
|
| @@ -1133,11 +1133,11 @@ uint32_t SkRegion::writeToMemory(void* storage) const {
|
| return buffer.pos();
|
| }
|
|
|
| -uint32_t SkRegion::readFromMemory(const void* storage) {
|
| - SkRBuffer buffer(storage);
|
| - SkRegion tmp;
|
| - int32_t count;
|
| -
|
| +size_t SkRegion::readFromMemory(const void* storage, size_t length) {
|
| + SkRBufferWithSizeCheck buffer(storage, length);
|
| + SkRegion tmp;
|
| + int32_t count;
|
| +
|
| count = buffer.readS32();
|
| if (count >= 0) {
|
| buffer.read(&tmp.fBounds, sizeof(tmp.fBounds));
|
| @@ -1146,12 +1146,18 @@ uint32_t SkRegion::readFromMemory(const void* storage) {
|
| } else {
|
| int32_t ySpanCount = buffer.readS32();
|
| int32_t intervalCount = buffer.readS32();
|
| - tmp.allocateRuns(count, ySpanCount, intervalCount);
|
| - buffer.read(tmp.fRunHead->writable_runs(), count * sizeof(RunType));
|
| + if (buffer.isValid()) {
|
| + tmp.allocateRuns(count, ySpanCount, intervalCount);
|
| + buffer.read(tmp.fRunHead->writable_runs(), count * sizeof(RunType));
|
| + }
|
| }
|
| }
|
| - this->swap(tmp);
|
| - return buffer.pos();
|
| + size_t sizeRead = 0;
|
| + if (buffer.isValid()) {
|
| + this->swap(tmp);
|
| + sizeRead = buffer.pos();
|
| + }
|
| + return sizeRead;
|
| }
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|