From a60334ad59eb8b6f2f056febeb0c2b5ed20c7b57 Mon Sep 17 00:00:00 2001 From: Yuwei Chen Date: Wed, 9 Jul 2025 13:26:40 +0800 Subject: 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 --- BaseTools/Source/Python/FMMT/core/FvHandler.py | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) (limited to 'BaseTools/Source/Python') diff --git a/BaseTools/Source/Python/FMMT/core/FvHandler.py b/BaseTools/Source/Python/FMMT/core/FvHandler.py index 6d6a9c2..12d52c1 100644 --- a/BaseTools/Source/Python/FMMT/core/FvHandler.py +++ b/BaseTools/Source/Python/FMMT/core/FvHandler.py @@ -237,11 +237,20 @@ class FvHandler: Size_delta = len(CompressedData) - len(TargetTree.Data.OriData) ChangeSize(TargetTree, -Size_delta) if TargetTree.NextRel: + Original_Pad_Size = len(TargetTree.Data.PadData) TargetTree.Data.PadData = b'\x00' * New_Pad_Size - self.Remain_New_Free_Space = len(TargetTree.Data.OriData) + len(TargetTree.Data.PadData) - len(CompressedData) - New_Pad_Size + self.Remain_New_Free_Space = ( + len(TargetTree.Data.OriData) + + Original_Pad_Size - + len(CompressedData) - + New_Pad_Size + ) else: TargetTree.Data.PadData = b'' - self.Remain_New_Free_Space = len(TargetTree.Data.OriData) - len(CompressedData) + self.Remain_New_Free_Space = ( + len(TargetTree.Data.OriData) - + len(CompressedData) + ) TargetTree.Data.OriData = CompressedData elif len(CompressedData) == len(TargetTree.Data.OriData): TargetTree.Data.OriData = CompressedData @@ -347,15 +356,24 @@ class FvHandler: ModifySectionType(ParTree) Needed_Space += ParTree.Data.HeaderLength - OriHeaderLen # Update needed space with Delta_Pad_Size + Original_Pad_Size = len(ParTree.Data.PadData) if ParTree.NextRel: New_Pad_Size = GetPadSize(ParTree.Data.Size, SECTION_COMMON_ALIGNMENT) - Delta_Pad_Size = New_Pad_Size - len(ParTree.Data.PadData) + Delta_Pad_Size = New_Pad_Size - Original_Pad_Size ParTree.Data.PadData = b'\x00' * New_Pad_Size Needed_Space += Delta_Pad_Size else: ParTree.Data.PadData = b'' if Needed_Space < 0: - self.Remain_New_Free_Space = len(ParTree.Data.OriData) - len(CompressedData) + if ParTree.NextRel: + self.Remain_New_Free_Space = ( + len(ParTree.Data.OriData) + Original_Pad_Size - + len(CompressedData) - New_Pad_Size + ) + else: + self.Remain_New_Free_Space = ( + len(ParTree.Data.OriData) - len(CompressedData) + ) # If current section is not guided section elif Needed_Space: ChangeSize(ParTree, -Needed_Space) -- cgit v1.1