Loading tools/releasetools/common.py +3 −3 Original line number Diff line number Diff line Loading @@ -827,10 +827,10 @@ def GetSparseImage(which, tmpdir, input_zip, allow_shared_blocks, ranges = image.file_map[entry] # If a RangeSet has been tagged as using shared blocks while loading the # image, its block list must be already incomplete due to that reason. Don't # give it 'incomplete' tag to avoid messing up the imgdiff stats. # image, check the original block list to determine its completeness. Note # that the 'incomplete' flag would be tagged to the original RangeSet only. if ranges.extra.get('uses_shared_blocks'): continue ranges = ranges.extra['uses_shared_blocks'] if RoundUpTo4K(info.file_size) > ranges.size() * 4096: ranges.extra['incomplete'] = True Loading tools/releasetools/sparse_img.py +11 −5 Original line number Diff line number Diff line Loading @@ -248,15 +248,21 @@ class SparseImage(object): ranges = rangelib.RangeSet.parse(ranges) if allow_shared_blocks: # Find the shared blocks that have been claimed by others. # Find the shared blocks that have been claimed by others. If so, tag # the entry so that we can skip applying imgdiff on this file. shared_blocks = ranges.subtract(remaining) if shared_blocks: ranges = ranges.subtract(shared_blocks) if not ranges: non_shared = ranges.subtract(shared_blocks) if not non_shared: continue # Tag the entry so that we can skip applying imgdiff on this file. ranges.extra['uses_shared_blocks'] = True # There shouldn't anything in the extra dict yet. assert not ranges.extra, "Non-empty RangeSet.extra" # Put the non-shared RangeSet as the value in the block map, which # has a copy of the original RangeSet. non_shared.extra['uses_shared_blocks'] = ranges ranges = non_shared out[fn] = ranges assert ranges.size() == ranges.intersect(remaining).size() Loading tools/releasetools/validate_target_files.py +14 −7 Original line number Diff line number Diff line Loading @@ -89,13 +89,20 @@ def ValidateFileConsistency(input_zip, input_tmp, info_dict): logging.warning('Skipping %s that has incomplete block list', entry) continue # Use the original RangeSet if applicable, which includes the shared # blocks. And this needs to happen before checking the monotonicity flag. if ranges.extra.get('uses_shared_blocks'): file_ranges = ranges.extra['uses_shared_blocks'] else: file_ranges = ranges # TODO(b/79951650): Handle files with non-monotonic ranges. if not ranges.monotonic: if not file_ranges.monotonic: logging.warning( 'Skipping %s that has non-monotonic ranges: %s', entry, ranges) 'Skipping %s that has non-monotonic ranges: %s', entry, file_ranges) continue blocks_sha1 = image.RangeSha1(ranges) blocks_sha1 = image.RangeSha1(file_ranges) # The filename under unpacked directory, such as SYSTEM/bin/sh. unpacked_name = os.path.join( Loading @@ -104,7 +111,7 @@ def ValidateFileConsistency(input_zip, input_tmp, info_dict): file_sha1 = unpacked_file.sha1 assert blocks_sha1 == file_sha1, \ 'file: %s, range: %s, blocks_sha1: %s, file_sha1: %s' % ( entry, ranges, blocks_sha1, file_sha1) entry, file_ranges, blocks_sha1, file_sha1) logging.info('Validating file consistency.') Loading Loading @@ -311,9 +318,9 @@ def ValidateVerifiedBootImages(input_tmp, info_dict, options): if info_dict.get("avb_enable") == "true": logging.info('Verifying Verified Boot 2.0 (AVB) images...') # Temporarily disable the verification for AVB-signed images, due to the # dependency on PyCrypto in `avbtool verify_image` (Bug: 119624011). logging.info('Temporarily disabled due to b/119624011') # TODO(b/120517892): Temporarily disable the verification for AVB-signed # images. Needing supporting changes in caller to pass in the desired keys. logging.info('Temporarily disabled due to b/120517892') def main(): Loading Loading
tools/releasetools/common.py +3 −3 Original line number Diff line number Diff line Loading @@ -827,10 +827,10 @@ def GetSparseImage(which, tmpdir, input_zip, allow_shared_blocks, ranges = image.file_map[entry] # If a RangeSet has been tagged as using shared blocks while loading the # image, its block list must be already incomplete due to that reason. Don't # give it 'incomplete' tag to avoid messing up the imgdiff stats. # image, check the original block list to determine its completeness. Note # that the 'incomplete' flag would be tagged to the original RangeSet only. if ranges.extra.get('uses_shared_blocks'): continue ranges = ranges.extra['uses_shared_blocks'] if RoundUpTo4K(info.file_size) > ranges.size() * 4096: ranges.extra['incomplete'] = True Loading
tools/releasetools/sparse_img.py +11 −5 Original line number Diff line number Diff line Loading @@ -248,15 +248,21 @@ class SparseImage(object): ranges = rangelib.RangeSet.parse(ranges) if allow_shared_blocks: # Find the shared blocks that have been claimed by others. # Find the shared blocks that have been claimed by others. If so, tag # the entry so that we can skip applying imgdiff on this file. shared_blocks = ranges.subtract(remaining) if shared_blocks: ranges = ranges.subtract(shared_blocks) if not ranges: non_shared = ranges.subtract(shared_blocks) if not non_shared: continue # Tag the entry so that we can skip applying imgdiff on this file. ranges.extra['uses_shared_blocks'] = True # There shouldn't anything in the extra dict yet. assert not ranges.extra, "Non-empty RangeSet.extra" # Put the non-shared RangeSet as the value in the block map, which # has a copy of the original RangeSet. non_shared.extra['uses_shared_blocks'] = ranges ranges = non_shared out[fn] = ranges assert ranges.size() == ranges.intersect(remaining).size() Loading
tools/releasetools/validate_target_files.py +14 −7 Original line number Diff line number Diff line Loading @@ -89,13 +89,20 @@ def ValidateFileConsistency(input_zip, input_tmp, info_dict): logging.warning('Skipping %s that has incomplete block list', entry) continue # Use the original RangeSet if applicable, which includes the shared # blocks. And this needs to happen before checking the monotonicity flag. if ranges.extra.get('uses_shared_blocks'): file_ranges = ranges.extra['uses_shared_blocks'] else: file_ranges = ranges # TODO(b/79951650): Handle files with non-monotonic ranges. if not ranges.monotonic: if not file_ranges.monotonic: logging.warning( 'Skipping %s that has non-monotonic ranges: %s', entry, ranges) 'Skipping %s that has non-monotonic ranges: %s', entry, file_ranges) continue blocks_sha1 = image.RangeSha1(ranges) blocks_sha1 = image.RangeSha1(file_ranges) # The filename under unpacked directory, such as SYSTEM/bin/sh. unpacked_name = os.path.join( Loading @@ -104,7 +111,7 @@ def ValidateFileConsistency(input_zip, input_tmp, info_dict): file_sha1 = unpacked_file.sha1 assert blocks_sha1 == file_sha1, \ 'file: %s, range: %s, blocks_sha1: %s, file_sha1: %s' % ( entry, ranges, blocks_sha1, file_sha1) entry, file_ranges, blocks_sha1, file_sha1) logging.info('Validating file consistency.') Loading Loading @@ -311,9 +318,9 @@ def ValidateVerifiedBootImages(input_tmp, info_dict, options): if info_dict.get("avb_enable") == "true": logging.info('Verifying Verified Boot 2.0 (AVB) images...') # Temporarily disable the verification for AVB-signed images, due to the # dependency on PyCrypto in `avbtool verify_image` (Bug: 119624011). logging.info('Temporarily disabled due to b/119624011') # TODO(b/120517892): Temporarily disable the verification for AVB-signed # images. Needing supporting changes in caller to pass in the desired keys. logging.info('Temporarily disabled due to b/120517892') def main(): Loading