diff options
author | Kelvin Zhang <zhangkelvin@google.com> | 2022-04-15 20:19:08 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2022-04-15 20:19:08 +0000 |
commit | 3a0abd0b471d9a47a582b59e5902ba8776dfb34c (patch) | |
tree | 119bc5a8390aaeb3b03179154e19b15d92ec1a7c | |
parent | 1d5acb2b6c47d4453b1c28b4dc53055af0a4990c (diff) | |
parent | 4e54b254b0ed03357244eb347e3cc5bd1912cd7a (diff) |
Fix crash on ota_extractor am: 93e3810b0c am: 4e54b254b0
Original change: https://android-review.googlesource.com/c/platform/system/update_engine/+/2063610
Change-Id: Ib9bbf4694ef3249fd16b6f524c3be76aa3d35551
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r-- | aosp/ota_extractor.cc | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/aosp/ota_extractor.cc b/aosp/ota_extractor.cc index 7492bc5a..4a57370f 100644 --- a/aosp/ota_extractor.cc +++ b/aosp/ota_extractor.cc @@ -118,15 +118,21 @@ bool ExtractImagesFromOTA(const DeltaArchiveManifest& manifest, << " size: " << partition.new_partition_info().size(); const auto output_path = output_dir_path.Append(partition.partition_name() + ".img").value(); - const auto input_path = - input_dir_path.Append(partition.partition_name() + ".img").value(); auto out_fd = std::make_shared<chromeos_update_engine::EintrSafeFileDescriptor>(); TEST_AND_RETURN_FALSE_ERRNO( out_fd->Open(output_path.c_str(), O_RDWR | O_CREAT, 0644)); auto in_fd = std::make_shared<chromeos_update_engine::EintrSafeFileDescriptor>(); - TEST_AND_RETURN_FALSE_ERRNO(in_fd->Open(input_path.c_str(), O_RDONLY)); + if (partition.has_old_partition_info()) { + const auto input_path = + input_dir_path.Append(partition.partition_name() + ".img").value(); + LOG(INFO) << "Incremental OTA detected for partition " + << partition.partition_name() << " opening source image " + << input_path; + CHECK(in_fd->Open(input_path.c_str(), O_RDONLY)) + << " failed to open " << input_path; + } for (const auto& op : partition.operations()) { if (op.has_src_sha256_hash()) { @@ -159,9 +165,11 @@ bool ExtractImagesFromOTA(const DeltaArchiveManifest& manifest, TEST_AND_RETURN_FALSE(executor.ExecuteReplaceOperation( op, std::move(direct_writer), blob.data(), blob.size())); } else if (op.type() == InstallOperation::SOURCE_COPY) { + CHECK(in_fd->IsOpen()); TEST_AND_RETURN_FALSE(executor.ExecuteSourceCopyOperation( op, std::move(direct_writer), in_fd)); } else { + CHECK(in_fd->IsOpen()); TEST_AND_RETURN_FALSE(executor.ExecuteDiffOperation( op, std::move(direct_writer), in_fd, blob.data(), blob.size())); } |