diff --git a/src/core/SkReadBuffer.h b/src/core/SkReadBuffer.h
index 3c02158..f4e9f6a 100644
--- a/src/core/SkReadBuffer.h
+++ b/src/core/SkReadBuffer.h
@@ -68,10 +68,10 @@
         kGradientShaderFloatColor_Version  = 49,
         kXfermodeToBlendMode_Version       = 50,
         kXfermodeToBlendMode2_Version      = 51,
-         */
         kTextBlobImplicitRunCount_Version  = 52,
         kComposeShaderCanLerp_Version      = 54,
         kNoModesInMergeImageFilter_Verison = 55,
+         */
         kTileModeInBlurImageFilter_Version = 56,
         kTileInfoInSweepGradient_Version   = 57,
         k2PtConicalNoFlip_Version          = 58,
diff --git a/src/core/SkTextBlob.cpp b/src/core/SkTextBlob.cpp
index 91ec79b..6d89e6f 100644
--- a/src/core/SkTextBlob.cpp
+++ b/src/core/SkTextBlob.cpp
@@ -790,20 +790,13 @@
 }
 
 sk_sp<SkTextBlob> SkTextBlob::MakeFromBuffer(SkReadBuffer& reader) {
-    const int runCount = reader.isVersionLT(SkReadBuffer::kTextBlobImplicitRunCount_Version)
-    ? reader.read32() : std::numeric_limits<int>::max();
-    if (runCount < 0) {
-        return nullptr;
-    }
-
     SkRect bounds;
     reader.readRect(&bounds);
 
     SkTextBlobBuilder blobBuilder;
-    for (int i = 0; i < runCount; ++i) {
+    for (;;) {
         int glyphCount = reader.read32();
-        if (glyphCount == 0 &&
-            !reader.isVersionLT(SkReadBuffer::kTextBlobImplicitRunCount_Version)) {
+        if (glyphCount == 0) {
             // End-of-runs marker.
             break;
         }
diff --git a/src/effects/SkMergeImageFilter.cpp b/src/effects/SkMergeImageFilter.cpp
index 1d425ed..1da4d41 100644
--- a/src/effects/SkMergeImageFilter.cpp
+++ b/src/effects/SkMergeImageFilter.cpp
@@ -111,26 +111,10 @@
 
 sk_sp<SkFlattenable> SkMergeImageFilter::CreateProc(SkReadBuffer& buffer) {
     Common common;
-    if (!common.unflatten(buffer, -1)) {
+    if (!common.unflatten(buffer, -1) || !buffer.isValid()) {
         return nullptr;
     }
-
-    const int count = common.inputCount();
-    if (buffer.isVersionLT(SkReadBuffer::kNoModesInMergeImageFilter_Verison)) {
-        bool hasModes = buffer.readBool();
-        if (hasModes) {
-            // Older pictures may have stored blendmodes, but by inspection we think these were
-            // all src-over, so we have removed support for storing these.
-            SkAutoSTArray<4, uint8_t> modes8(count);
-            if (!buffer.readByteArray(modes8.get(), count)) {
-                return nullptr;
-            }
-            if (!buffer.isValid()) {
-                return nullptr;
-            }
-        }
-    }
-    return Make(common.inputs(), count, &common.cropRect());
+    return Make(common.inputs(), common.inputCount(), &common.cropRect());
 }
 
 void SkMergeImageFilter::flatten(SkWriteBuffer& buffer) const {
diff --git a/src/shaders/SkComposeShader.cpp b/src/shaders/SkComposeShader.cpp
index 34e5486..2feae77 100644
--- a/src/shaders/SkComposeShader.cpp
+++ b/src/shaders/SkComposeShader.cpp
@@ -43,17 +43,12 @@
     sk_sp<SkShader> dst(buffer.readShader());
     sk_sp<SkShader> src(buffer.readShader());
     unsigned        mode = buffer.read32();
-
-    float lerp = 1;
-    if (!buffer.isVersionLT(SkReadBuffer::kComposeShaderCanLerp_Version)) {
-        lerp = buffer.readScalar();
-    }
+    float           lerp = buffer.readScalar();
 
     // check for valid mode before we cast to the enum type
-    if (mode > (unsigned)SkBlendMode::kLastMode) {
+    if (!buffer.validate(mode <= (unsigned)SkBlendMode::kLastMode)) {
         return nullptr;
     }
-
     return MakeCompose(std::move(dst), std::move(src), static_cast<SkBlendMode>(mode), lerp);
 }
 
