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
This commit is contained in:
parent
bfeddae9da
commit
e9617eb352
@ -280,9 +280,12 @@ void SkWriter32::writeString(const char str[], size_t len) {
|
||||
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) {
|
||||
|
@ -77,6 +77,11 @@ static void test2(skiatest::Reporter* reporter, SkWriter32* writer) {
|
||||
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());
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user