Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a2faaa8c authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "Remove all ZIP64LIMIT hack"

parents 1fca7c5e 37a42909
Loading
Loading
Loading
Loading
+7 −8
Original line number Diff line number Diff line
@@ -842,14 +842,13 @@ def ReplaceUpdatedFiles(zip_filename, files_list):
  SYSTEM/ after rebuilding recovery.
  """
  common.ZipDelete(zip_filename, files_list)
  output_zip = zipfile.ZipFile(zip_filename, "a",
  with zipfile.ZipFile(zip_filename, "a",
                               compression=zipfile.ZIP_DEFLATED,
                               allowZip64=True)
                               allowZip64=True) as output_zip:
    for item in files_list:
      file_path = os.path.join(OPTIONS.input_tmp, item)
      assert os.path.exists(file_path)
      common.ZipWrite(output_zip, file_path, arcname=item)
  common.ZipClose(output_zip)


def HasPartition(partition_name):
@@ -1176,7 +1175,7 @@ def AddImagesToTargetFiles(filename):
  AddVbmetaDigest(output_zip)

  if output_zip:
    common.ZipClose(output_zip)
    output_zip.close()
    if OPTIONS.replace_updated_files_list:
      ReplaceUpdatedFiles(output_zip.filename,
                          OPTIONS.replace_updated_files_list)
+1 −1
Original line number Diff line number Diff line
@@ -415,7 +415,7 @@ def SignUncompressedApex(avbtool, apex_file, payload_key, container_key,
  apex_zip = zipfile.ZipFile(apex_file, 'a', allowZip64=True)
  common.ZipWrite(apex_zip, payload_file, arcname=APEX_PAYLOAD_IMAGE)
  common.ZipWrite(apex_zip, payload_public_key, arcname=APEX_PUBKEY)
  common.ZipClose(apex_zip)
  apex_zip.close()

  # 3. Sign the APEX container with container_key.
  signed_apex = common.MakeTempFile(prefix='apex-container-', suffix='.apex')
+2 −2
Original line number Diff line number Diff line
@@ -142,7 +142,7 @@ def VerifyAbOtaPayload(cert, package):
  """Verifies the payload and metadata signatures in an A/B OTA payload."""
  package_zip = zipfile.ZipFile(package, 'r', allowZip64=True)
  if 'payload.bin' not in package_zip.namelist():
    common.ZipClose(package_zip)
    package_zip.close()
    return

  print('Verifying A/B OTA payload signatures...')
@@ -160,7 +160,7 @@ def VerifyAbOtaPayload(cert, package):
         '--in_file=' + payload_file,
         '--public_key=' + pubkey]
  common.RunAndCheckOutput(cmd)
  common.ZipClose(package_zip)
  package_zip.close()

  # Verified successfully upon reaching here.
  print('\nPayload signatures VERIFIED\n\n')
+1 −30
Original line number Diff line number Diff line
@@ -2797,18 +2797,6 @@ class PasswordManager(object):
def ZipWrite(zip_file, filename, arcname=None, perms=0o644,
             compress_type=None):

  # http://b/18015246
  # Python 2.7's zipfile implementation wrongly thinks that zip64 is required
  # for files larger than 2GiB. We can work around this by adjusting their
  # limit. Note that `zipfile.writestr()` will not work for strings larger than
  # 2GiB. The Python interpreter sometimes rejects strings that large (though
  # it isn't clear to me exactly what circumstances cause this).
  # `zipfile.write()` must be used directly to work around this.
  #
  # This mess can be avoided if we port to python3.
  saved_zip64_limit = zipfile.ZIP64_LIMIT
  zipfile.ZIP64_LIMIT = (1 << 32) - 1

  if compress_type is None:
    compress_type = zip_file.compression
  if arcname is None:
@@ -2834,14 +2822,13 @@ def ZipWrite(zip_file, filename, arcname=None, perms=0o644,
  finally:
    os.chmod(filename, saved_stat.st_mode)
    os.utime(filename, (saved_stat.st_atime, saved_stat.st_mtime))
    zipfile.ZIP64_LIMIT = saved_zip64_limit


def ZipWriteStr(zip_file, zinfo_or_arcname, data, perms=None,
                compress_type=None):
  """Wrap zipfile.writestr() function to work around the zip64 limit.

  Even with the ZIP64_LIMIT workaround, it won't allow writing a string
  Python's zip implementation won't allow writing a string
  longer than 2GiB. It gives 'OverflowError: size does not fit in an int'
  when calling crc32(bytes).

@@ -2850,9 +2837,6 @@ def ZipWriteStr(zip_file, zinfo_or_arcname, data, perms=None,
  when we know the string won't be too long.
  """

  saved_zip64_limit = zipfile.ZIP64_LIMIT
  zipfile.ZIP64_LIMIT = (1 << 32) - 1

  if not isinstance(zinfo_or_arcname, zipfile.ZipInfo):
    zinfo = zipfile.ZipInfo(filename=zinfo_or_arcname)
    zinfo.compress_type = zip_file.compression
@@ -2885,7 +2869,6 @@ def ZipWriteStr(zip_file, zinfo_or_arcname, data, perms=None,
  zinfo.date_time = (2009, 1, 1, 0, 0, 0)

  zip_file.writestr(zinfo, data)
  zipfile.ZIP64_LIMIT = saved_zip64_limit


def ZipDelete(zip_filename, entries, force=False):
@@ -2919,18 +2902,6 @@ def ZipDelete(zip_filename, entries, force=False):
  os.replace(new_zipfile, zip_filename)


def ZipClose(zip_file):
  # http://b/18015246
  # zipfile also refers to ZIP64_LIMIT during close() when it writes out the
  # central directory.
  saved_zip64_limit = zipfile.ZIP64_LIMIT
  zipfile.ZIP64_LIMIT = (1 << 32) - 1

  zip_file.close()

  zipfile.ZIP64_LIMIT = saved_zip64_limit


class DeviceSpecificParams(object):
  module = None

+2 −2
Original line number Diff line number Diff line
@@ -277,7 +277,7 @@ endif;

  # We haven't written the metadata entry, which will be done in
  # FinalizeMetadata.
  common.ZipClose(output_zip)
  output_zip.close()

  needed_property_files = (
      NonAbOtaPropertyFiles(),
@@ -531,7 +531,7 @@ endif;

  # We haven't written the metadata entry yet, which will be handled in
  # FinalizeMetadata().
  common.ZipClose(output_zip)
  output_zip.close()

  # Sign the generated zip package unless no_signing is specified.
  needed_property_files = (
Loading