In SkWriter32::writeString, initialize all memory reserved.

SkFlatData compares data which is sometimes created by writeString.
Initialize all the memory in writeString so it does not compare
uninitialized memory.

See http://code.google.com/p/skia/issues/detail?id=721&thanks=721

Review URL: https://codereview.appspot.com/6428054

git-svn-id: http://skia.googlecode.com/svn/trunk@4715 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/core/SkWriter32.cpp b/src/core/SkWriter32.cpp
index 2fdb133..23f51b9 100644
--- a/src/core/SkWriter32.cpp
+++ b/src/core/SkWriter32.cpp
@@ -280,9 +280,12 @@
     size_t alignedLen = SkAlign4(len + 1);
     char* ptr = (char*)this->reserve(alignedLen);
     memcpy(ptr, str, len);
-    ptr[len] = 0;
-    // we may have left 0,1,2,3 bytes uninitialized, since we reserved align4
-    // number of bytes. That's ok, since the reader will know to skip those
+    // Add the terminating 0, and pad the rest with 0s
+    ptr += len;
+    int n = alignedLen - len;
+    while (--n >= 0) {
+        *ptr++ = 0;
+    }
 }
 
 size_t SkWriter32::WriteStringSize(const char* str, size_t len) {
diff --git a/tests/Writer32Test.cpp b/tests/Writer32Test.cpp
index 311f37d..5c9d7ea 100644
--- a/tests/Writer32Test.cpp
+++ b/tests/Writer32Test.cpp
@@ -77,6 +77,11 @@
         REPORTER_ASSERT(reporter, i == len);
         REPORTER_ASSERT(reporter, strlen(str) == len);
         REPORTER_ASSERT(reporter, !memcmp(str, gStr, len));
+        // Ensure that the align4 of the string is padded with zeroes.
+        size_t alignedSize = SkAlign4(len + 1);
+        for (size_t j = len; j < alignedSize; j++) {
+            REPORTER_ASSERT(reporter, 0 == str[j]);
+        }
     }
     REPORTER_ASSERT(reporter, reader.eof());
 }