]> git.proxmox.com Git - mirror_edk2.git/commitdiff
BaseTools: Check PCD DataType and the maxsize.
authorBobCF <bob.c.feng@intel.com>
Fri, 1 Dec 2017 06:15:59 +0000 (14:15 +0800)
committerLiming Gao <liming.gao@intel.com>
Mon, 25 Dec 2017 03:05:53 +0000 (11:05 +0800)
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Feng Bob C <bob.c.feng@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
BaseTools/Source/Python/Common/Misc.py
BaseTools/Source/Python/Workspace/DscBuildData.py

index a2c6a6a0fbd842b00fce6a0a57523d7066ae5498..549c8791765ffc0c46f381dbda5ce9d7b7ddb61d 100644 (file)
@@ -1611,6 +1611,12 @@ def AnalyzeDscPcd(Setting, PcdType, DataType=''):
         else:\r
             IsValid = (len(FieldList) <= 3)\r
 #         Value, Size = ParseFieldValue(Value)\r
         else:\r
             IsValid = (len(FieldList) <= 3)\r
 #         Value, Size = ParseFieldValue(Value)\r
+        if Size:\r
+            try:\r
+                int(Size,16) if Size.upper().startswith("0X") else int(Size)\r
+            except:\r
+                IsValid = False\r
+                Size = -1\r
         return [str(Value), '', str(Size)], IsValid, 0\r
     elif PcdType in (MODEL_PCD_DYNAMIC_DEFAULT, MODEL_PCD_DYNAMIC_EX_DEFAULT):\r
         Value = FieldList[0]\r
         return [str(Value), '', str(Size)], IsValid, 0\r
     elif PcdType in (MODEL_PCD_DYNAMIC_DEFAULT, MODEL_PCD_DYNAMIC_EX_DEFAULT):\r
         Value = FieldList[0]\r
@@ -1633,7 +1639,14 @@ def AnalyzeDscPcd(Setting, PcdType, DataType=''):
             IsValid = (len(FieldList) <= 1)\r
         else:\r
             IsValid = (len(FieldList) <= 3)\r
             IsValid = (len(FieldList) <= 1)\r
         else:\r
             IsValid = (len(FieldList) <= 3)\r
-        return [Value, Type, Size], IsValid, 0\r
+\r
+        if Size:\r
+            try:\r
+                int(Size,16) if Size.upper().startswith("0X") else int(Size)\r
+            except:\r
+                IsValid = False\r
+                Size = -1\r
+        return [Value, Type, str(Size)], IsValid, 0\r
     elif PcdType in (MODEL_PCD_DYNAMIC_VPD, MODEL_PCD_DYNAMIC_EX_VPD):\r
         VpdOffset = FieldList[0]\r
         Value = Size = ''\r
     elif PcdType in (MODEL_PCD_DYNAMIC_VPD, MODEL_PCD_DYNAMIC_EX_VPD):\r
         VpdOffset = FieldList[0]\r
         Value = Size = ''\r
@@ -1649,8 +1662,13 @@ def AnalyzeDscPcd(Setting, PcdType, DataType=''):
             IsValid = (len(FieldList) <= 1)\r
         else:\r
             IsValid = (len(FieldList) <= 3)\r
             IsValid = (len(FieldList) <= 1)\r
         else:\r
             IsValid = (len(FieldList) <= 3)\r
-\r
-        return [VpdOffset, Size, Value], IsValid, 2\r
+        if Size:\r
+            try:\r
+                int(Size,16) if Size.upper().startswith("0X") else int(Size)\r
+            except:\r
+                IsValid = False\r
+                Size = -1\r
+        return [VpdOffset, str(Size), Value], IsValid, 2\r
     elif PcdType in (MODEL_PCD_DYNAMIC_HII, MODEL_PCD_DYNAMIC_EX_HII):\r
         HiiString = FieldList[0]\r
         Guid = Offset = Value = Attribute = ''\r
     elif PcdType in (MODEL_PCD_DYNAMIC_HII, MODEL_PCD_DYNAMIC_EX_HII):\r
         HiiString = FieldList[0]\r
         Guid = Offset = Value = Attribute = ''\r
index 7594b45771ea7b479146c97b2cfbf55dc222a699..23c2c0d4102e92a421cbe5fc0397641f4a555d75 100644 (file)
@@ -806,9 +806,14 @@ class DscBuildData(PlatformBuildClassObject):
                             "Pcd (%s.%s) defined in DSC is not declared in DEC files. Arch: ['%s']" % (TokenSpaceGuid, PcdCName, self._Arch),\r
                             File=self.MetaFile, Line=LineNo)\r
         ValueList, IsValid, Index = AnalyzeDscPcd(Setting, PcdType, self._DecPcds[PcdCName, TokenSpaceGuid].DatumType)\r
                             "Pcd (%s.%s) defined in DSC is not declared in DEC files. Arch: ['%s']" % (TokenSpaceGuid, PcdCName, self._Arch),\r
                             File=self.MetaFile, Line=LineNo)\r
         ValueList, IsValid, Index = AnalyzeDscPcd(Setting, PcdType, self._DecPcds[PcdCName, TokenSpaceGuid].DatumType)\r
-        if not IsValid and PcdType not in [MODEL_PCD_FEATURE_FLAG, MODEL_PCD_FIXED_AT_BUILD]:\r
-            EdkLogger.error('build', FORMAT_INVALID, "Pcd format incorrect.", File=self.MetaFile, Line=LineNo,\r
-                            ExtraData="%s.%s|%s" % (TokenSpaceGuid, PcdCName, Setting))\r
+        if not IsValid:\r
+            if PcdType not in [MODEL_PCD_FEATURE_FLAG, MODEL_PCD_FIXED_AT_BUILD]:\r
+                EdkLogger.error('build', FORMAT_INVALID, "Pcd format incorrect.", File=self.MetaFile, Line=LineNo,\r
+                                ExtraData="%s.%s|%s" % (TokenSpaceGuid, PcdCName, Setting))\r
+            else:\r
+                if ValueList[2] == '-1':\r
+                    EdkLogger.error('build', FORMAT_INVALID, "Pcd format incorrect.", File=self.MetaFile, Line=LineNo,\r
+                                ExtraData="%s.%s|%s" % (TokenSpaceGuid, PcdCName, Setting))\r
         if ValueList[Index] and PcdType not in [MODEL_PCD_FEATURE_FLAG, MODEL_PCD_FIXED_AT_BUILD]:\r
             try:\r
                 ValueList[Index] = ValueExpression(ValueList[Index], GlobalData.gPlatformPcds)(True)\r
         if ValueList[Index] and PcdType not in [MODEL_PCD_FEATURE_FLAG, MODEL_PCD_FIXED_AT_BUILD]:\r
             try:\r
                 ValueList[Index] = ValueExpression(ValueList[Index], GlobalData.gPlatformPcds)(True)\r
@@ -836,6 +841,10 @@ class DscBuildData(PlatformBuildClassObject):
             if not Valid:\r
                 EdkLogger.error('build', FORMAT_INVALID, ErrStr, File=self.MetaFile, Line=LineNo,\r
                                 ExtraData="%s.%s" % (TokenSpaceGuid, PcdCName))\r
             if not Valid:\r
                 EdkLogger.error('build', FORMAT_INVALID, ErrStr, File=self.MetaFile, Line=LineNo,\r
                                 ExtraData="%s.%s" % (TokenSpaceGuid, PcdCName))\r
+            if PcdType in (MODEL_PCD_DYNAMIC_DEFAULT, MODEL_PCD_DYNAMIC_EX_DEFAULT):\r
+                if self._DecPcds[PcdCName, TokenSpaceGuid].DatumType.strip() != ValueList[1].strip():\r
+                    EdkLogger.error('build', FORMAT_INVALID, ErrStr , File=self.MetaFile, Line=LineNo,\r
+                                ExtraData="%s.%s|%s" % (TokenSpaceGuid, PcdCName, Setting))\r
         return ValueList\r
 \r
     def _FilterPcdBySkuUsage(self,Pcds):\r
         return ValueList\r
 \r
     def _FilterPcdBySkuUsage(self,Pcds):\r