Make update_engine reserve space for decompression via apexd

Bug: 172911822
Test: atest ApexHandlerAndroidTest (checked that file was created)
Change-Id: I8024695ebba1a9c1796c05b27a0eec3da3b3d1bc
diff --git a/aosp/update_attempter_android.cc b/aosp/update_attempter_android.cc
index c685855..1080acb 100644
--- a/aosp/update_attempter_android.cc
+++ b/aosp/update_attempter_android.cc
@@ -321,7 +321,8 @@
     const vector<string>& key_value_pair_headers,
     brillo::ErrorPtr* error) {
   // update_engine state must be checked before modifying payload_fd_ otherwise
-  // already running update will be terminated (existing file descriptor will be closed)
+  // already running update will be terminated (existing file descriptor will be
+  // closed)
   if (status_ == UpdateStatus::UPDATED_NEED_REBOOT) {
     return LogAndSetError(
         error, FROM_HERE, "An update already applied, waiting for reboot");
@@ -983,7 +984,14 @@
                                    manifest.apex_info().end());
   uint64_t apex_size_required = 0;
   if (apex_handler_android_ != nullptr) {
-    apex_size_required = apex_handler_android_->CalculateSize(apex_infos);
+    auto result = apex_handler_android_->CalculateSize(apex_infos);
+    if (!result.ok()) {
+      LogAndSetError(error,
+                     FROM_HERE,
+                     "Failed to calculate size required for compressed APEX");
+      return 0;
+    }
+    apex_size_required = *result;
   }
 
   string payload_id = GetPayloadId(headers);
@@ -1006,7 +1014,7 @@
   }
 
   if (apex_size_required > 0 && apex_handler_android_ != nullptr &&
-      !apex_handler_android_->AllocateSpace(apex_size_required)) {
+      !apex_handler_android_->AllocateSpace(apex_infos)) {
     LOG(ERROR) << "Insufficient space for apex decompression: "
                << apex_size_required << " bytes";
     return apex_size_required;