Fix crash when hash tree isn't enabled but verity is

Test: th
Bug: 223110157
Change-Id: Idd254fb484ffabb3162e1f3232739cc29e00d51e
diff --git a/payload_consumer/verity_writer_android.cc b/payload_consumer/verity_writer_android.cc
index b669b4d..ffa2944 100644
--- a/payload_consumer/verity_writer_android.cc
+++ b/payload_consumer/verity_writer_android.cc
@@ -117,16 +117,18 @@
   }
   // All hash tree data blocks has been hashed, write hash tree to disk.
   LOG(INFO) << "Writing verity hash tree to " << partition_->target_path;
-  TEST_AND_RETURN_FALSE(hash_tree_builder_->BuildHashTree());
-  TEST_AND_RETURN_FALSE_ERRNO(
-      write_fd->Seek(partition_->hash_tree_offset, SEEK_SET));
-  auto success =
-      hash_tree_builder_->WriteHashTree([write_fd](auto data, auto size) {
-        return utils::WriteAll(write_fd, data, size);
-      });
-  // hashtree builder already prints error messages.
-  TEST_AND_RETURN_FALSE(success);
-  hash_tree_builder_.reset();
+  if (hash_tree_builder_) {
+    TEST_AND_RETURN_FALSE(hash_tree_builder_->BuildHashTree());
+    TEST_AND_RETURN_FALSE_ERRNO(
+        write_fd->Seek(partition_->hash_tree_offset, SEEK_SET));
+    auto success =
+        hash_tree_builder_->WriteHashTree([write_fd](auto data, auto size) {
+          return utils::WriteAll(write_fd, data, size);
+        });
+    // hashtree builder already prints error messages.
+    TEST_AND_RETURN_FALSE(success);
+    hash_tree_builder_.reset();
+  }
   if (partition_->fec_size != 0) {
     LOG(INFO) << "Writing verity FEC to " << partition_->target_path;
     TEST_AND_RETURN_FALSE(EncodeFEC(read_fd,
diff --git a/payload_consumer/verity_writer_android_unittest.cc b/payload_consumer/verity_writer_android_unittest.cc
index 693bcda..5ff0189 100644
--- a/payload_consumer/verity_writer_android_unittest.cc
+++ b/payload_consumer/verity_writer_android_unittest.cc
@@ -165,4 +165,22 @@
   ASSERT_EQ(part_data, actual_part);
 }
 
+TEST_F(VerityWriterAndroidTest, HashTreeDisabled) {
+  partition_.hash_tree_size = 0;
+  partition_.hash_tree_data_size = 0;
+  partition_.hash_tree_offset = 0;
+  partition_.hash_tree_data_offset = 0;
+
+  partition_.fec_data_offset = 0;
+  partition_.fec_data_size = 4096;
+  partition_.fec_offset = 4096;
+  partition_.fec_size = 2 * 4096;
+  brillo::Blob part_data(3 * 4096, 0x1);
+  test_utils::WriteFileVector(partition_.target_path, part_data);
+  ASSERT_TRUE(verity_writer_.Init(partition_));
+  ASSERT_TRUE(verity_writer_.Update(0, part_data.data(), part_data.size()));
+  ASSERT_TRUE(
+      verity_writer_.Finalize(partition_fd_.get(), partition_fd_.get()));
+}
+
 }  // namespace chromeos_update_engine