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;
}