]> git.proxmox.com Git - mirror_edk2.git/commitdiff
BaseTools:Support decimal version number in ECC check
authorwenyi,xie via groups.io <xiewenyi2=huawei.com@groups.io>
Fri, 18 Mar 2022 06:09:24 +0000 (14:09 +0800)
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Mon, 28 Mar 2022 01:45:05 +0000 (01:45 +0000)
REF:https://bugzilla.tianocore.org/show_bug.cgi?id=3872

When doing ecc inf version check, the decimal type version number
like 1.27 is treated as invalid version.
So the code should be updated to support decimal type version number.

Cc: Bob Feng <bob.c.feng@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Yuwei Chen <yuwei.chen@intel.com>
Signed-off-by: Wenyi Xie <xiewenyi2@huawei.com>
Reviewed-by: Bob Feng <bob.c.feng@intel.com>
BaseTools/Source/Python/Ecc/MetaFileWorkspace/MetaFileParser.py

index 9c27c8e16a052a9f527bc30ebb97660297163fd7..2d98ac5eadb2532fce7e03374360003d41856e89 100644 (file)
@@ -31,6 +31,10 @@ from GenFds.FdfParser import FdfParser
 from Common.LongFilePathSupport import OpenLongFilePath as open\r
 from Common.LongFilePathSupport import CodecOpenLongFilePath\r
 \r
+## RegEx for finding file versions\r
+hexVersionPattern = re.compile(r'0[xX][\da-f-A-F]{5,8}')\r
+decVersionPattern = re.compile(r'\d+\.\d+')\r
+\r
 ## A decorator used to parse macro definition\r
 def ParseMacro(Parser):\r
     def MacroParser(self):\r
@@ -331,11 +335,19 @@ class MetaFileParser(object):
         Name, Value = self._ValueList[1], self._ValueList[2]\r
         # Sometimes, we need to make differences between EDK and EDK2 modules\r
         if Name == 'INF_VERSION':\r
-            try:\r
+            if hexVersionPattern.match(Value):\r
                 self._Version = int(Value, 0)\r
-            except:\r
+            elif decVersionPattern.match(Value):\r
+                ValueList = Value.split('.')\r
+                Major = int(ValueList[0], 0)\r
+                Minor = int(ValueList[1], 0)\r
+                if Major > 0xffff or Minor > 0xffff:\r
+                    EdkLogger.error('Parser', FORMAT_INVALID, "Invalid version number",\r
+                                    ExtraData=self._CurrentLine, File=self.MetaFile, Line=self._LineIndex + 1)\r
+                self._Version = int('0x{0:04x}{1:04x}'.format(Major, Minor), 0)\r
+            else:\r
                 EdkLogger.error('Parser', FORMAT_INVALID, "Invalid version number",\r
-                                ExtraData=self._CurrentLine, File=self.MetaFile, Line=self._LineIndex+1)\r
+                                ExtraData=self._CurrentLine, File=self.MetaFile, Line=self._LineIndex + 1)\r
         elif Name == 'MODULE_UNI_FILE':\r
             UniFile = os.path.join(os.path.dirname(self.MetaFile), Value)\r
             if os.path.exists(UniFile):\r