binman: Update CheckEntries() for compressed sections
At present this function assumes that the size of a section is at least as large as its contents. With compression this is often not the case. Relax this constraint by using the uncompressed size, if available. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
@@ -299,19 +299,21 @@ class Entry_section(Entry):
|
|||||||
|
|
||||||
def CheckEntries(self):
|
def CheckEntries(self):
|
||||||
"""Check that entries do not overlap or extend outside the section"""
|
"""Check that entries do not overlap or extend outside the section"""
|
||||||
|
max_size = self.size if self.uncomp_size is None else self.uncomp_size
|
||||||
|
|
||||||
offset = 0
|
offset = 0
|
||||||
prev_name = 'None'
|
prev_name = 'None'
|
||||||
for entry in self._entries.values():
|
for entry in self._entries.values():
|
||||||
entry.CheckEntries()
|
entry.CheckEntries()
|
||||||
if (entry.offset < self._skip_at_start or
|
if (entry.offset < self._skip_at_start or
|
||||||
entry.offset + entry.size > self._skip_at_start +
|
entry.offset + entry.size > self._skip_at_start +
|
||||||
self.size):
|
max_size):
|
||||||
entry.Raise('Offset %#x (%d) size %#x (%d) is outside the '
|
entry.Raise('Offset %#x (%d) size %#x (%d) is outside the '
|
||||||
"section '%s' starting at %#x (%d) "
|
"section '%s' starting at %#x (%d) "
|
||||||
'of size %#x (%d)' %
|
'of size %#x (%d)' %
|
||||||
(entry.offset, entry.offset, entry.size, entry.size,
|
(entry.offset, entry.offset, entry.size, entry.size,
|
||||||
self._node.path, self._skip_at_start,
|
self._node.path, self._skip_at_start,
|
||||||
self._skip_at_start, self.size, self.size))
|
self._skip_at_start, max_size, max_size))
|
||||||
if entry.offset < offset and entry.size:
|
if entry.offset < offset and entry.size:
|
||||||
entry.Raise("Offset %#x (%d) overlaps with previous entry '%s' "
|
entry.Raise("Offset %#x (%d) overlaps with previous entry '%s' "
|
||||||
"ending at %#x (%d)" %
|
"ending at %#x (%d)" %
|
||||||
|
Reference in New Issue
Block a user