Merge "Double check the sha1 for ranges during package generation" am: 92d73d3ab9

am: e62b278865

Change-Id: Icc1145a71430470ee9ef44043cd4b3532207bed9
This commit is contained in:
Tianjie Xu 2018-01-29 20:00:05 +00:00 committed by android-build-merger
commit 65ac13cf08

View file

@ -362,6 +362,7 @@ class BlockImageDiff(object):
# Double-check our work. # Double-check our work.
self.AssertSequenceGood() self.AssertSequenceGood()
self.AssertSha1Good()
self.ComputePatches(prefix) self.ComputePatches(prefix)
self.WriteTransfers(prefix) self.WriteTransfers(prefix)
@ -867,6 +868,21 @@ class BlockImageDiff(object):
xf.tgt_name + " (from " + xf.src_name + ")"), xf.tgt_name + " (from " + xf.src_name + ")"),
xf.tgt_ranges, xf.src_ranges)) xf.tgt_ranges, xf.src_ranges))
def AssertSha1Good(self):
"""Check the SHA-1 of the src & tgt blocks in the transfer list.
Double check the SHA-1 value to avoid the issue in b/71908713, where
SparseImage.RangeSha1() messed up with the hash calculation in multi-thread
environment. That specific problem has been fixed by protecting the
underlying generator function 'SparseImage._GetRangeData()' with lock.
"""
for xf in self.transfers:
tgt_sha1 = self.tgt.RangeSha1(xf.tgt_ranges)
assert xf.tgt_sha1 == tgt_sha1
if xf.style == "diff":
src_sha1 = self.src.RangeSha1(xf.src_ranges)
assert xf.src_sha1 == src_sha1
def AssertSequenceGood(self): def AssertSequenceGood(self):
# Simulate the sequences of transfers we will output, and check that: # Simulate the sequences of transfers we will output, and check that:
# - we never read a block after writing it, and # - we never read a block after writing it, and