Don't set data_offset and data_length if data blob is empty.

ZERO operation was failing because we were setting these fields in
delta payload.

Bug: 27858697
Bug: 27156473
Test: apply a minor v4 payload.

Change-Id: I4b6abf3dde052b181a85d417f17123788855b69c
diff --git a/payload_generator/annotated_operation.cc b/payload_generator/annotated_operation.cc
index b7f3434..e28fe85 100644
--- a/payload_generator/annotated_operation.cc
+++ b/payload_generator/annotated_operation.cc
@@ -38,6 +38,11 @@
 
 bool AnnotatedOperation::SetOperationBlob(const brillo::Blob& blob,
                                           BlobFileWriter* blob_file) {
+  if (blob.empty()) {
+    op.clear_data_offset();
+    op.clear_data_length();
+    return true;
+  }
   off_t data_offset = blob_file->StoreBlob(blob);
   TEST_AND_RETURN_FALSE(data_offset != -1);
   op.set_data_offset(data_offset);
diff --git a/payload_generator/delta_diff_utils.cc b/payload_generator/delta_diff_utils.cc
index e6751f1..6f895f6 100644
--- a/payload_generator/delta_diff_utils.cc
+++ b/payload_generator/delta_diff_utils.cc
@@ -483,12 +483,7 @@
     aop.op = operation;
 
     // Write the data
-    if (operation.type() != InstallOperation::MOVE &&
-        operation.type() != InstallOperation::SOURCE_COPY) {
-      TEST_AND_RETURN_FALSE(aop.SetOperationBlob(data, blob_file));
-    } else {
-      TEST_AND_RETURN_FALSE(blob_file->StoreBlob(data) != -1);
-    }
+    TEST_AND_RETURN_FALSE(aop.SetOperationBlob(data, blob_file));
     aops->emplace_back(aop);
   }
   return true;
diff --git a/payload_generator/full_update_generator.cc b/payload_generator/full_update_generator.cc
index 3240606..8fdb6ec 100644
--- a/payload_generator/full_update_generator.cc
+++ b/payload_generator/full_update_generator.cc
@@ -107,9 +107,7 @@
       buffer_in_, version_, &op_blob, &op_type));
 
   aop_->op.set_type(op_type);
-  if (!op_blob.empty()) {
-    TEST_AND_RETURN_FALSE(aop_->SetOperationBlob(op_blob, blob_file_));
-  }
+  TEST_AND_RETURN_FALSE(aop_->SetOperationBlob(op_blob, blob_file_));
   return true;
 }