diff --git a/Android.bp b/Android.bp
index ae331d2..42a954c 100644
--- a/Android.bp
+++ b/Android.bp
@@ -613,7 +613,7 @@
     ],
     shared_libs: [
         "liblz4",
-    ]
+    ],
 }
 
 cc_library_static {
@@ -621,7 +621,7 @@
     host_supported: true,
     defaults: ["ue_defaults", "liblz4diff_defaults"],
     srcs: [
-        "lz4diff/lz4patch.cc",
+        "lz4diff/lz4diff.cc",
         "lz4diff/lz4diff_compress.cc",
     ],
 }
@@ -789,11 +789,13 @@
 
 genrule {
     name: "ue_unittest_erofs_imgs",
-    cmd: "$(in) $(location mkfs.erofs) $(location gen/erofs_empty.img) &&" +
-         "$(in) $(location mkfs.erofs) $(location gen/erofs.img) $(location delta_generator)",
+    cmd: "$(in) $(location mkfs.erofs) $(location gen/erofs_empty.img) && " +
+         "$(in) $(location mkfs.erofs) $(location gen/erofs.img) $(location delta_generator) && " +
+         "$(in) $(location mkfs.erofs) $(location gen/erofs_new.img) $(location delta_generator) lz4hc,7",
     srcs: ["sample_images/generate_test_erofs_images.sh"],
     out: [
         "gen/erofs.img",
+        "gen/erofs_new.img",
         "gen/erofs_empty.img",
     ],
     tools: [
@@ -820,6 +822,7 @@
         "common/terminator_unittest.cc",
         "common/test_utils.cc",
         "lz4diff/lz4diff_compress_unittest.cc",
+        "lz4diff/lz4diff_unittest.cc",
         "payload_generator/ab_generator_unittest.cc",
         "payload_generator/blob_file_writer_unittest.cc",
         "payload_generator/block_mapping_unittest.cc",
diff --git a/lz4diff/lz4diff.cc b/lz4diff/lz4diff.cc
index 3e4d3b4..25dce00 100644
--- a/lz4diff/lz4diff.cc
+++ b/lz4diff/lz4diff.cc
@@ -122,8 +122,7 @@
 static bool ConstructLz4diffPatch(Blob inner_patch,
                                   const Lz4diffHeader& header,
                                   Blob* output) {
-  Blob patch;
-  patch.resize(kLz4diffHeaderSize);
+  Blob patch(kLz4diffHeaderSize);
   std::memcpy(patch.data(), kLz4diffMagic.data(), kLz4diffMagic.size());
   *reinterpret_cast<uint32_t*>(patch.data() + kLz4diffMagic.size()) =
       htobe32(kLz4diffVersion);
@@ -182,16 +181,15 @@
              std::string_view dst,
              const CompressedFile& src_file_info,
              const CompressedFile& dst_file_info,
-             const bool zero_padding_enabled,
              Blob* output,
              InstallOperation::Type* op_type) noexcept {
   const auto& src_block_info = src_file_info.blocks;
   const auto& dst_block_info = dst_file_info.blocks;
 
-  auto decompressed_src =
-      TryDecompressBlob(src, src_block_info, zero_padding_enabled);
-  auto decompressed_dst =
-      TryDecompressBlob(dst, dst_block_info, zero_padding_enabled);
+  auto decompressed_src = TryDecompressBlob(
+      src, src_block_info, src_file_info.zero_padding_enabled);
+  auto decompressed_dst = TryDecompressBlob(
+      dst, dst_block_info, dst_file_info.zero_padding_enabled);
   if (decompressed_src.empty() || decompressed_dst.empty()) {
     LOG(ERROR) << "Failed to decompress input data";
     return false;
@@ -222,7 +220,7 @@
 
   auto recompressed_blob = TryCompressBlob(ToStringView(decompressed_dst),
                                            dst_block_info,
-                                           zero_padding_enabled,
+                                           dst_file_info.zero_padding_enabled,
                                            dst_file_info.algo);
   TEST_AND_RETURN_FALSE(recompressed_blob.size() > 0);
 
@@ -236,14 +234,12 @@
              const Blob& dst,
              const CompressedFile& src_file_info,
              const CompressedFile& dst_file_info,
-             const bool zero_padding_enabled,
              Blob* output,
              InstallOperation::Type* op_type) noexcept {
   return Lz4Diff(ToStringView(src),
                  ToStringView(dst),
                  src_file_info,
                  dst_file_info,
-                 zero_padding_enabled,
                  output,
                  op_type);
 }
diff --git a/lz4diff/lz4diff.h b/lz4diff/lz4diff.h
index a1a1b9b..92bdb10 100644
--- a/lz4diff/lz4diff.h
+++ b/lz4diff/lz4diff.h
@@ -30,7 +30,6 @@
              std::string_view dst,
              const CompressedFile& src_file_info,
              const CompressedFile& dst_file_info,
-             const bool zero_padding_enabled,
              Blob* output,
              InstallOperation::Type* op_type = nullptr) noexcept;
 
@@ -38,7 +37,6 @@
              const Blob& dst,
              const CompressedFile& src_file_info,
              const CompressedFile& dst_file_info,
-             const bool zero_padding_enabled,
              Blob* output,
              InstallOperation::Type* op_type = nullptr) noexcept;
 
diff --git a/lz4diff/lz4diff_compress.cc b/lz4diff/lz4diff_compress.cc
index 333148a..e580c91 100644
--- a/lz4diff/lz4diff_compress.cc
+++ b/lz4diff/lz4diff_compress.cc
@@ -40,8 +40,7 @@
     compressed_size += block.compressed_length;
   }
   CHECK_EQ(uncompressed_size, blob.size());
-  Blob output;
-  output.resize(utils::RoundUp(compressed_size, kBlockSize));
+  Blob output(utils::RoundUp(compressed_size, kBlockSize));
   auto hc = LZ4_createStreamHC();
   DEFER {
     if (hc) {
@@ -110,10 +109,6 @@
                   0);
       }
     }
-    if (static_cast<uint64_t>(src_size) != block.uncompressed_length) {
-      LOG(WARNING) << "Recompress size mismatch: " << src_size << ", "
-                   << block.uncompressed_length;
-    }
   }
   // Any trailing data will be copied to the output buffer.
   output.insert(output.end(), blob.begin() + uncompressed_size, blob.end());
diff --git a/lz4diff/lz4diff_unittest.cc b/lz4diff/lz4diff_unittest.cc
new file mode 100644
index 0000000..aabff99
--- /dev/null
+++ b/lz4diff/lz4diff_unittest.cc
@@ -0,0 +1,110 @@
+//
+// Copyright (C) 2021 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#include <unistd.h>
+
+#include <algorithm>
+#include <mutex>
+#include <string>
+#include <vector>
+
+#include <base/format_macros.h>
+#include <base/logging.h>
+#include <base/strings/string_number_conversions.h>
+#include <base/strings/string_util.h>
+#include <base/strings/stringprintf.h>
+#include <gtest/gtest.h>
+#include <erofs/internal.h>
+#include <erofs/io.h>
+
+#include "lz4diff/lz4diff.h"
+#include "lz4diff/lz4patch.h"
+#include "update_engine/common/test_utils.h"
+#include "update_engine/common/utils.h"
+#include "update_engine/lz4diff/lz4diff_compress.h"
+#include "update_engine/payload_generator/delta_diff_generator.h"
+#include "update_engine/payload_generator/erofs_filesystem.h"
+#include "update_engine/payload_generator/extent_utils.h"
+
+using std::string;
+using std::vector;
+
+namespace chromeos_update_engine {
+
+namespace {
+class Lz4diffTest : public ::testing::Test {};
+
+using test_utils::GetBuildArtifactsPath;
+
+// This test parses the sample images generated during build time with the
+// "generate_image.sh" script. The expected conditions of each file in these
+// images is encoded in the file name, as defined in the mentioned script.
+TEST_F(Lz4diffTest, DiffElfBinary) {
+  const auto old_img = GetBuildArtifactsPath("gen/erofs.img");
+  const auto new_img = GetBuildArtifactsPath("gen/erofs_new.img");
+  auto old_fs = ErofsFilesystem::CreateFromFile(old_img);
+  ASSERT_NE(old_fs, nullptr);
+  ASSERT_EQ(kBlockSize, old_fs->GetBlockSize());
+  auto new_fs = ErofsFilesystem::CreateFromFile(new_img);
+  ASSERT_NE(new_fs, nullptr);
+  ASSERT_EQ(kBlockSize, new_fs->GetBlockSize());
+
+  vector<ErofsFilesystem::File> old_files;
+  ASSERT_TRUE(old_fs->GetFiles(&old_files));
+  vector<ErofsFilesystem::File> new_files;
+  ASSERT_TRUE(new_fs->GetFiles(&new_files));
+
+  const auto it =
+      std::find_if(old_files.begin(), old_files.end(), [](const auto& file) {
+        return file.name == "/delta_generator";
+      });
+  ASSERT_NE(it, old_files.end())
+      << "There should be a delta_generator entry in gen/erofs.img. Is the "
+         "generate_test_erofs_imgages.sh script implemented wrong?";
+  const auto new_it =
+      std::find_if(new_files.begin(), new_files.end(), [](const auto& file) {
+        return file.name == "/delta_generator";
+      });
+  ASSERT_NE(new_it, new_files.end())
+      << "There should be a delta_generator entry in gen/erofs_new.img. Is the "
+         "generate_test_erofs_imgages.sh script implemented wrong?";
+
+  const auto old_delta_generator = *it;
+  auto new_delta_generator = *new_it;
+  Blob old_data;
+  ASSERT_TRUE(utils::ReadExtents(
+      old_img, old_delta_generator.extents, &old_data, kBlockSize));
+  Blob new_data;
+  ASSERT_TRUE(utils::ReadExtents(
+      new_img, new_delta_generator.extents, &new_data, kBlockSize));
+  // New image is actually generated with compression level 7, we use a
+  // different compression level so that recompressed blob is different. This
+  // way we can test the postfix functionality.
+  new_delta_generator.compressed_file_info.algo.set_level(5);
+  Blob diff_blob;
+  ASSERT_TRUE(Lz4Diff(old_data,
+                      new_data,
+                      old_delta_generator.compressed_file_info,
+                      new_delta_generator.compressed_file_info,
+                      &diff_blob));
+  Blob patched_new_data;
+  ASSERT_TRUE(Lz4Patch(old_data, diff_blob, &patched_new_data));
+  ASSERT_EQ(patched_new_data, new_data);
+}
+
+}  // namespace
+
+}  // namespace chromeos_update_engine
diff --git a/lz4diff/lz4patch.cc b/lz4diff/lz4patch.cc
index 1dcf933..7766e24 100644
--- a/lz4diff/lz4patch.cc
+++ b/lz4diff/lz4patch.cc
@@ -297,6 +297,10 @@
   return true;
 }
 
+bool Lz4Patch(const Blob& src_data, const Blob& patch_data, Blob* output) {
+  return Lz4Patch(ToStringView(src_data), ToStringView(patch_data), output);
+}
+
 std::ostream& operator<<(std::ostream& out, const CompressionAlgorithm& info) {
   out << "Algo {type: " << info.Type_Name(info.type());
   if (info.level() != 0) {
diff --git a/lz4diff/lz4patch.h b/lz4diff/lz4patch.h
index 5610891..8f66180 100644
--- a/lz4diff/lz4patch.h
+++ b/lz4diff/lz4patch.h
@@ -17,12 +17,14 @@
 #ifndef UPDATE_ENGINE_LZ4DIFF_LZ4PATCH_H_
 #define UPDATE_ENGINE_LZ4DIFF_LZ4PATCH_H_
 
+#include "lz4diff/lz4diff_compress.h"
 #include "lz4diff_format.h"
 
 namespace chromeos_update_engine {
 bool Lz4Patch(std::string_view src_data,
               std::string_view patch_data,
               Blob* output);
+bool Lz4Patch(const Blob& src_data, const Blob& patch_data, Blob* output);
 
 std::ostream& operator<<(std::ostream& out, const Lz4diffHeader&);
 
diff --git a/payload_consumer/cached_file_descriptor.h b/payload_consumer/cached_file_descriptor.h
index 28c48f7..ada112b 100644
--- a/payload_consumer/cached_file_descriptor.h
+++ b/payload_consumer/cached_file_descriptor.h
@@ -31,9 +31,8 @@
 
 class CachedFileDescriptor : public FileDescriptor {
  public:
-  CachedFileDescriptor(FileDescriptorPtr fd, size_t cache_size) : fd_(fd) {
-    cache_.resize(cache_size);
-  }
+  CachedFileDescriptor(FileDescriptorPtr fd, size_t cache_size)
+      : fd_(fd), cache_(cache_size) {}
   ~CachedFileDescriptor() override = default;
 
   bool Open(const char* path, int flags, mode_t mode) override {
diff --git a/sample_images/generate_test_erofs_images.sh b/sample_images/generate_test_erofs_images.sh
index c058f3c..b3b6aa7 100755
--- a/sample_images/generate_test_erofs_images.sh
+++ b/sample_images/generate_test_erofs_images.sh
@@ -6,6 +6,12 @@
 mkfs=$1
 output_image=$2
 delta_generator=$3
+compression_algo=$4
+
+if [ -z "$compression_algo" ]
+then
+  compression_algo="lz4hc,9"
+fi
 
 fs_root=$(mktemp -d -t erofs-XXXXXXXXXX)
 
@@ -30,8 +36,9 @@
   truncate -s 1M ${fs_root}/dir1/dir2/file4
   touch ${fs_root}/dir1/dir2/dir123/empty
   cp ${delta_generator} ${fs_root}/delta_generator
+  truncate -s 8M ${fs_root}/delta_generator
   echo "PAYLOAD_MINOR_VERSION=1234" > ${fs_root}/etc/update_engine.conf
   truncate -s 16M ${fs_root}/dir1/dir2/dir123/chunks_of_zero
 fi
 
-${mkfs} -z lz4hc,9 ${output_image} ${fs_root}
+${mkfs} -z $compression_algo ${output_image} ${fs_root}
