Index: src/core/SkOrderedWriteBuffer.cpp |
diff --git a/src/core/SkOrderedWriteBuffer.cpp b/src/core/SkOrderedWriteBuffer.cpp |
index 64f52193acaf7c55dab611a5b53f41f13685fd7e..8904d7cde1f9f36bdb8c09ffc7fc6c32dff8c3bd 100644 |
--- a/src/core/SkOrderedWriteBuffer.cpp |
+++ b/src/core/SkOrderedWriteBuffer.cpp |
@@ -270,7 +270,9 @@ void SkOrderedWriteBuffer::writeFlattenable(SkFlattenable* flattenable) { |
factory = flattenable->getFactory(); |
} |
if (NULL == factory) { |
- if (fFactorySet != NULL || fNamedFactorySet != NULL) { |
+ if (this->isValidating()) { |
+ this->writeString(NULL); |
+ } else if (fFactorySet != NULL || fNamedFactorySet != NULL) { |
this->write32(0); |
} else { |
this->writeFunctionPtr(NULL); |
@@ -290,7 +292,14 @@ void SkOrderedWriteBuffer::writeFlattenable(SkFlattenable* flattenable) { |
* name. SkGPipe uses this technique so it can write the name to its |
* stream before writing the flattenable. |
*/ |
- if (fFactorySet) { |
+ if (this->isValidating()) { |
+ const char* name = SkFlattenable::FactoryToName(factory); |
+ this->writeString(name); |
+ if (NULL == name) { |
+ SkASSERT(!"Missing factory name"); |
+ return; |
+ } |
+ } else if (fFactorySet) { |
this->write32(fFactorySet->add(factory)); |
} else if (fNamedFactorySet) { |
int32_t index = fNamedFactorySet->find(factory); |