Skip to content

Commit a60334a

Browse files
YuweiChen1110mergify[bot]
authored andcommitted
BaseTools: Fix FMMT FvHandler Padding operation issue
When using the FMMT FvHandler function, new padding size should be calculated correctly comparing with origin ffs and new ffs, else it will cause the binary size changes. This patch is used to fix the bug. Signed-off-by: Yuwei Chen <yuwei.chen@intel.com>
1 parent 491530a commit a60334a

File tree

1 file changed

+22
-4
lines changed

1 file changed

+22
-4
lines changed

BaseTools/Source/Python/FMMT/core/FvHandler.py

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -237,11 +237,20 @@ def CompressSectionData(self, TargetTree, pos: int, GuidTool=None) -> None:
237237
Size_delta = len(CompressedData) - len(TargetTree.Data.OriData)
238238
ChangeSize(TargetTree, -Size_delta)
239239
if TargetTree.NextRel:
240+
Original_Pad_Size = len(TargetTree.Data.PadData)
240241
TargetTree.Data.PadData = b'\x00' * New_Pad_Size
241-
self.Remain_New_Free_Space = len(TargetTree.Data.OriData) + len(TargetTree.Data.PadData) - len(CompressedData) - New_Pad_Size
242+
self.Remain_New_Free_Space = (
243+
len(TargetTree.Data.OriData) +
244+
Original_Pad_Size -
245+
len(CompressedData) -
246+
New_Pad_Size
247+
)
242248
else:
243249
TargetTree.Data.PadData = b''
244-
self.Remain_New_Free_Space = len(TargetTree.Data.OriData) - len(CompressedData)
250+
self.Remain_New_Free_Space = (
251+
len(TargetTree.Data.OriData) -
252+
len(CompressedData)
253+
)
245254
TargetTree.Data.OriData = CompressedData
246255
elif len(CompressedData) == len(TargetTree.Data.OriData):
247256
TargetTree.Data.OriData = CompressedData
@@ -347,15 +356,24 @@ def ModifyTest(self, ParTree, Needed_Space: int) -> None:
347356
ModifySectionType(ParTree)
348357
Needed_Space += ParTree.Data.HeaderLength - OriHeaderLen
349358
# Update needed space with Delta_Pad_Size
359+
Original_Pad_Size = len(ParTree.Data.PadData)
350360
if ParTree.NextRel:
351361
New_Pad_Size = GetPadSize(ParTree.Data.Size, SECTION_COMMON_ALIGNMENT)
352-
Delta_Pad_Size = New_Pad_Size - len(ParTree.Data.PadData)
362+
Delta_Pad_Size = New_Pad_Size - Original_Pad_Size
353363
ParTree.Data.PadData = b'\x00' * New_Pad_Size
354364
Needed_Space += Delta_Pad_Size
355365
else:
356366
ParTree.Data.PadData = b''
357367
if Needed_Space < 0:
358-
self.Remain_New_Free_Space = len(ParTree.Data.OriData) - len(CompressedData)
368+
if ParTree.NextRel:
369+
self.Remain_New_Free_Space = (
370+
len(ParTree.Data.OriData) + Original_Pad_Size -
371+
len(CompressedData) - New_Pad_Size
372+
)
373+
else:
374+
self.Remain_New_Free_Space = (
375+
len(ParTree.Data.OriData) - len(CompressedData)
376+
)
359377
# If current section is not guided section
360378
elif Needed_Space:
361379
ChangeSize(ParTree, -Needed_Space)

0 commit comments

Comments
 (0)