]> git.proxmox.com Git - mirror_edk2.git/commitdiff
BaseTools:ECC report errors on account of analyze special characters
authorFan, ZhijuX <zhijux.fan@intel.com>
Mon, 6 May 2019 02:35:07 +0000 (10:35 +0800)
committerFeng, Bob C <bob.c.feng@intel.com>
Wed, 8 May 2019 01:41:42 +0000 (09:41 +0800)
BZ:https://bugzilla.tianocore.org/show_bug.cgi?id=1751

In case that a C function body contains the string of L'', L'\"',
L"\"", L''', L""", L"\"\"", L"\"^", L" \"", L"\" \"", ('L",\\\""')
ECC tool running under python3 interpreter will report error.
The antlr4 module misidentified this character

This patch is going to fix that issue.

Cc: Bob Feng <bob.c.feng@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Signed-off-by: Zhiju.Fan <zhijux.fan@intel.com>
Reviewed-by: Bob Feng <bob.c.feng@intel.com>
BaseTools/Source/Python/Ecc/CodeFragmentCollector.py
BaseTools/Source/Python/Ecc/Configuration.py
BaseTools/Source/Python/Ecc/c.py
BaseTools/Source/Python/Ecc/config.ini

index c428752c05198d75ac59bedeb47aeca38addd3d6..d8d6aff08a6e04d827ee4039d5e850ae9e8bd788 100644 (file)
@@ -73,7 +73,7 @@ class CodeFragmentCollector:
         self.FileName = FileName\r
         self.CurrentLineNumber = 1\r
         self.CurrentOffsetWithinLine = 0\r
-\r
+        self.TokenReleaceList = []\r
         self.__Token = ""\r
         self.__SkippedChars = ""\r
 \r
@@ -503,6 +503,9 @@ class CodeFragmentCollector:
         FileStringContents = ''\r
         for fileLine in self.Profile.FileLinesList:\r
             FileStringContents += fileLine\r
+        for Token in self.TokenReleaceList:\r
+            if Token in FileStringContents:\r
+                FileStringContents = FileStringContents.replace(Token, 'TOKENSTRING')\r
         cStream = antlr.InputStream(FileStringContents)\r
         lexer = CLexer(cStream)\r
         tStream = antlr.CommonTokenStream(lexer)\r
index 46e2723d8facf719533769ac76e1961f81c9a3d3..57ae932ed2595423369734feb2fad1f07e8f30a6 100644 (file)
@@ -114,6 +114,7 @@ _ConfigFileToInternalTranslation = {
     "SmmCommParaCheckBufferType":"SmmCommParaCheckBufferType",\r
     "SpaceCheckAll":"SpaceCheckAll",\r
     "SpellingCheckAll":"SpellingCheckAll",\r
+    "TokenReleaceList":"TokenReleaceList",\r
     "UniCheckAll":"UniCheckAll",\r
     "UniCheckHelpInfo":"UniCheckHelpInfo",\r
     "UniCheckPCDInfo":"UniCheckPCDInfo",\r
@@ -389,6 +390,8 @@ class Configuration(object):
         # A list for Copyright format\r
         self.Copyright = []\r
 \r
+        self.TokenReleaceList = []\r
+\r
         self.ParseConfig()\r
 \r
     def ParseConfig(self):\r
@@ -419,6 +422,8 @@ class Configuration(object):
                     List[1] = GetSplitValueList(List[1], TAB_COMMA_SPLIT)\r
                 if List[0] == 'Copyright':\r
                     List[1] = GetSplitValueList(List[1], TAB_COMMA_SPLIT)\r
+                if List[0] == 'TokenReleaceList':\r
+                    List[1] = GetSplitValueList(List[1], TAB_COMMA_SPLIT)\r
                 self.__dict__[_ConfigFileToInternalTranslation[List[0]]] = List[1]\r
 \r
     def ShowMe(self):\r
index fdb53e4e3e1c7926deb4ed82f73629f9a111438d..2a73da7cb874e0c270c67b76b2fa2e2174bbc350 100644 (file)
@@ -495,6 +495,8 @@ def CollectSourceCodeDataIntoDB(RootDir):
     tuple = os.walk(RootDir)\r
     IgnoredPattern = GetIgnoredDirListPattern()\r
     ParseErrorFileList = []\r
+    TokenReleaceList = EccGlobalData.gConfig.TokenReleaceList\r
+    TokenReleaceList.extend(['L",\\\""'])\r
 \r
     for dirpath, dirnames, filenames in tuple:\r
         if IgnoredPattern.match(dirpath.upper()):\r
@@ -519,6 +521,7 @@ def CollectSourceCodeDataIntoDB(RootDir):
                 EdkLogger.info("Parsing " + FullName)\r
                 model = f.endswith('c') and DataClass.MODEL_FILE_C or DataClass.MODEL_FILE_H\r
                 collector = CodeFragmentCollector.CodeFragmentCollector(FullName)\r
+                collector.TokenReleaceList = TokenReleaceList\r
                 try:\r
                     collector.ParseFile()\r
                 except UnicodeError:\r
index 62d112f5be30e8da2ad54c24d1ec7ae8468c8355..5529d0f2db6a410bda96a802648206bd188105ff 100644 (file)
@@ -277,3 +277,5 @@ SmmCommParaCheckBufferType = 1
 BinaryExtList = EXE, EFI, FV, ROM, DLL, COM, BMP, GIF, PYD, CMP, BIN, JPG, UNI, RAW, COM2, LIB, DEPEX, SYS, DB\r
 # A list for only scanning dirs, the dirs should be the top folder(s) under workspace\r
 ScanOnlyDirList = ScanFolder1 ScanFolder2\r
+# A list for Used to circumvent special strings\r
+TokenReleaceList = L'', L'\"', L"\"", L''', L""", L"\"\"", L"\"^", L" \"", L"\" \""\r