Close the handle when the condition is met and return to prevent resource leaks am: f3e8a2cf2c

Original change: https://android-review.googlesource.com/c/platform/system/update_engine/+/2725234

Change-Id: I59a9633926506da0c08f539a908169c1838fb809
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/payload_consumer/certificate_parser_android.cc b/payload_consumer/certificate_parser_android.cc
index 4a20547..8b0fc79 100644
--- a/payload_consumer/certificate_parser_android.cc
+++ b/payload_consumer/certificate_parser_android.cc
@@ -72,21 +72,21 @@
         out_public_keys) {
   out_public_keys->clear();
 
-  ZipArchiveHandle handle;
-  if (int32_t open_status = OpenArchive(path.c_str(), &handle);
-      open_status != 0) {
+  ZipArchiveHandle raw_handle;
+  int32_t open_status = OpenArchive(path.c_str(), &raw_handle);
+  std::unique_ptr<ZipArchive, decltype(&CloseArchive)> handle(raw_handle, CloseArchive);
+  if (open_status != 0) {
     LOG(ERROR) << "Failed to open " << path << ": "
                << ErrorCodeString(open_status);
     return false;
   }
 
   std::vector<std::vector<uint8_t>> pem_certs;
-  if (!IterateZipEntriesAndSearchForKeys(handle, &pem_certs)) {
-    CloseArchive(handle);
+  if (!IterateZipEntriesAndSearchForKeys(handle.get(), &pem_certs)) {
     return false;
   }
-  CloseArchive(handle);
-
+  handle.reset();
+  raw_handle = nullptr;
   // Convert the certificates into public keys. Stop and return false if we
   // encounter an error.
   std::vector<std::unique_ptr<EVP_PKEY, decltype(&EVP_PKEY_free)>> result;