Fix the read on a closed zipfile

When calculating the dynamic fingerprints, we need to reopen the
input file if it's a ZipFile. Because the original object has been
closed.

Bug: 152167826
Test: generate an OTA package with zip input and overrides
Change-Id: I623da3cc5fcc91c6230fb5a6e86517ed995913b7
This commit is contained in:
Tianjie
2020-06-11 22:51:07 -07:00
parent 9df45f6ec2
commit eb06afb602

View File

@@ -2012,9 +2012,16 @@ def CalculateRuntimeDevicesAndFingerprints(build_info, boot_variable_values):
info_dict = copy.deepcopy(build_info.info_dict) info_dict = copy.deepcopy(build_info.info_dict)
for partition in common.PARTITIONS_WITH_CARE_MAP: for partition in common.PARTITIONS_WITH_CARE_MAP:
partition_prop_key = "{}.build.prop".format(partition) partition_prop_key = "{}.build.prop".format(partition)
old_props = info_dict[partition_prop_key] input_file = info_dict[partition_prop_key].input_file
info_dict[partition_prop_key] = common.PartitionBuildProps.FromInputFile( if isinstance(input_file, zipfile.ZipFile):
old_props.input_file, partition, placeholder_values) with zipfile.ZipFile(input_file.filename) as input_zip:
info_dict[partition_prop_key] = \
common.PartitionBuildProps.FromInputFile(input_zip, partition,
placeholder_values)
else:
info_dict[partition_prop_key] = \
common.PartitionBuildProps.FromInputFile(input_file, partition,
placeholder_values)
info_dict["build.prop"] = info_dict["system.build.prop"] info_dict["build.prop"] = info_dict["system.build.prop"]
new_build_info = common.BuildInfo(info_dict, build_info.oem_dicts) new_build_info = common.BuildInfo(info_dict, build_info.oem_dicts)