| Index: src/core/SkPath.cpp
 | 
| diff --git a/src/core/SkPath.cpp b/src/core/SkPath.cpp
 | 
| index defedd2e5db4026a38f33e38e18310aabfd7da9d..daac0772dcde6b55c19e8be6faeddbfa0f1187d8 100644
 | 
| --- a/src/core/SkPath.cpp
 | 
| +++ b/src/core/SkPath.cpp
 | 
| @@ -1861,7 +1861,8 @@ size_t SkPath::writeToMemory(void* storage) const {
 | 
|      int32_t packed = (fConvexity << kConvexity_SerializationShift) |
 | 
|                       (fFillType << kFillType_SerializationShift) |
 | 
|                       (fFirstDirection << kDirection_SerializationShift) |
 | 
| -                     (fIsVolatile << kIsVolatile_SerializationShift);
 | 
| +                     (fIsVolatile << kIsVolatile_SerializationShift) |
 | 
| +                     kCurrent_Version;
 | 
|  
 | 
|      buffer.write32(packed);
 | 
|  
 | 
| @@ -1879,12 +1880,33 @@ size_t SkPath::readFromMemory(const void* storage, size_t length) {
 | 
|          return 0;
 | 
|      }
 | 
|  
 | 
| +    unsigned version = packed & 0xFF;
 | 
| +    
 | 
|      fConvexity = (packed >> kConvexity_SerializationShift) & 0xFF;
 | 
|      fFillType = (packed >> kFillType_SerializationShift) & 0xFF;
 | 
| -    fFirstDirection = (packed >> kDirection_SerializationShift) & 0x3;
 | 
| +    uint8_t dir = (packed >> kDirection_SerializationShift) & 0x3;
 | 
|      fIsVolatile = (packed >> kIsVolatile_SerializationShift) & 0x1;
 | 
|      SkPathRef* pathRef = SkPathRef::CreateFromBuffer(&buffer);
 | 
|  
 | 
| +    // compatibility check
 | 
| +    if (version < kPathPrivFirstDirection_Version) {
 | 
| +        switch (dir) {  // old values
 | 
| +            case 0:
 | 
| +                fFirstDirection = SkPathPriv::kUnknown_FirstDirection;
 | 
| +                break;
 | 
| +            case 1:
 | 
| +                fFirstDirection = SkPathPriv::kCW_FirstDirection;
 | 
| +                break;
 | 
| +            case 2:
 | 
| +                fFirstDirection = SkPathPriv::kCCW_FirstDirection;
 | 
| +                break;
 | 
| +            default:
 | 
| +                SkASSERT(false);
 | 
| +        }
 | 
| +    } else {
 | 
| +        fFirstDirection = dir;
 | 
| +    }
 | 
| +
 | 
|      size_t sizeRead = 0;
 | 
|      if (buffer.isValid()) {
 | 
|          fPathRef.reset(pathRef);
 | 
| 
 |