aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar scroggo <scroggo@google.com>2016-02-16 06:59:18 -0800
committerGravatar Commit bot <commit-bot@chromium.org>2016-02-16 06:59:18 -0800
commit9dec5d2acdd12202a1f0ed571cb5ecee574a2550 (patch)
tree5fb47683c5b261c85f88a54f4f29732059e832c1
parentddd22d86455d95941ea21253b210819c1d4a3863 (diff)
Make SkRWBuffer destruct safely
Check for NULL before calling unref. Add a test. BUG=483369 GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1691383002 Review URL: https://codereview.chromium.org/1691383002
-rw-r--r--src/core/SkRWBuffer.cpp4
-rw-r--r--tests/DataRefTest.cpp7
2 files changed, 10 insertions, 1 deletions
diff --git a/src/core/SkRWBuffer.cpp b/src/core/SkRWBuffer.cpp
index 0784378d99..c0a93bdf53 100644
--- a/src/core/SkRWBuffer.cpp
+++ b/src/core/SkRWBuffer.cpp
@@ -168,7 +168,9 @@ SkRWBuffer::SkRWBuffer(size_t initialCapacity) : fHead(nullptr), fTail(nullptr),
SkRWBuffer::~SkRWBuffer() {
this->validate();
- fHead->unref();
+ if (fHead) {
+ fHead->unref();
+ }
}
void SkRWBuffer::append(const void* src, size_t length) {
diff --git a/tests/DataRefTest.cpp b/tests/DataRefTest.cpp
index f1e645ec7e..a474019e92 100644
--- a/tests/DataRefTest.cpp
+++ b/tests/DataRefTest.cpp
@@ -328,3 +328,10 @@ DEF_TEST(RWBuffer_size, r) {
REPORTER_ASSERT(r, !iter.next());
REPORTER_ASSERT(r, 0 == iter.size());
}
+
+// Tests that it is safe to destruct an SkRWBuffer without appending
+// anything to it.
+DEF_TEST(RWBuffer_noAppend, r) {
+ SkRWBuffer buffer;
+ REPORTER_ASSERT(r, 0 == buffer.size());
+}