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
diff --git a/src/core/SkRWBuffer.cpp b/src/core/SkRWBuffer.cpp
index 0784378..c0a93bd 100644
--- a/src/core/SkRWBuffer.cpp
+++ b/src/core/SkRWBuffer.cpp
@@ -168,7 +168,9 @@
 
 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 f1e645e..a474019 100644
--- a/tests/DataRefTest.cpp
+++ b/tests/DataRefTest.cpp
@@ -328,3 +328,10 @@
     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());
+}