]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Fixed VfrCompile crash on efivarstore statement.
authorEric Dong <eric.dong@intel.com>
Thu, 8 Jan 2015 08:36:05 +0000 (08:36 +0000)
committerydong10 <ydong10@Edk2>
Thu, 8 Jan 2015 08:36:05 +0000 (08:36 +0000)
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Eric Dong <eric.dong@intel.com>
Reviewed-by: Aaron Pop <aaronp@ami.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16591 6f19259b-4bc3-4df7-8a09-765794883524

BaseTools/Source/C/VfrCompile/VfrSyntax.g

index 1a5b3fd5885270fb0abfce5fa0cf9f35fb931852..2255d6f60b3b9a089b104bb26cb1bbaf7cbdf1ef 100644 (file)
@@ -917,10 +917,11 @@ vfrStatementVarStoreEfi :
      CHAR8           *TypeName;\r
      UINT32          LineNum;\r
      CHAR8           *StoreName = NULL;\r
+     BOOLEAN         CustomizedName = FALSE;\r
   >>\r
   E:Efivarstore                                     << VSEObj.SetLineNo(E->getLine()); >>\r
   (\r
-      TN:StringIdentifier ","                       << TypeName = TN->getText(); LineNum = TN->getLine(); >>\r
+      TN:StringIdentifier ","                       << TypeName = TN->getText(); LineNum = TN->getLine(); CustomizedName = TRUE; >>\r
     | U8:"UINT8" ","                                << TypeName = U8->getText(); LineNum = U8->getLine(); >>\r
     | U16:"UINT16" ","                              << TypeName = U16->getText(); LineNum = U16->getLine(); >>\r
     | C16:"CHAR16" ","                              << TypeName = (CHAR8 *) "UINT16"; LineNum = C16->getLine(); >>\r
@@ -953,6 +954,10 @@ vfrStatementVarStoreEfi :
                                                        if (StoreName == NULL) {\r
                                                          _PCATCH (VFR_RETURN_UNSUPPORTED, VN->getLine(), "Can't get varstore name for this StringId!");\r
                                                        }\r
+                                                       if (!CustomizedName) {\r
+                                                         _PCATCH (VFR_RETURN_UNSUPPORTED, E->getLine(), "Old style efivarstore must have String Identifier!");\r
+                                                         return;\r
+                                                       }\r
                                                        Size = _STOU32(N->getText(), N->getLine());\r
                                                        switch (Size) {\r
                                                        case 1:\r