Add input parameter check and guid format strict check.
authorlgao4 <lgao4@7335b38e-4728-0410-8992-fb3ffe349368>
Thu, 28 Feb 2008 07:10:34 +0000 (07:10 +0000)
committerlgao4 <lgao4@7335b38e-4728-0410-8992-fb3ffe349368>
Thu, 28 Feb 2008 07:10:34 +0000 (07:10 +0000)
git-svn-id: https://buildtools.tianocore.org/svn/buildtools/trunk/BaseTools@1026 7335b38e-4728-0410-8992-fb3ffe349368

Source/C/Common/ParseInf.c
Source/C/Common/StringFuncs.c
Source/C/Common/StringFuncs.h
Source/C/GenFfs/GenFfs.c
Source/C/GenFv/GenFv.c
Source/C/GenFw/GenFw.c
Source/C/GenSec/GenSec.c

index 4dea61c..ddc388b 100644 (file)
@@ -386,6 +386,30 @@ Returns:
   if (AsciiGuidBuffer == NULL || GuidBuffer == NULL) {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
+  //\r
+  // Check Guid Format strictly xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\r
+  //\r
+  for (Index = 0; Index < 36; Index ++) {\r
+    if (Index == 8 || Index == 13 || Index == 18 || Index == 23) {\r
+      if (AsciiGuidBuffer[Index] != '-') {\r
+        break;\r
+      }\r
+    } else {\r
+      if (((AsciiGuidBuffer[Index] >= '0') && (AsciiGuidBuffer[Index] <= '9')) || \r
+         ((AsciiGuidBuffer[Index] >= 'a') && (AsciiGuidBuffer[Index] <= 'f')) ||\r
+         ((AsciiGuidBuffer[Index] >= 'A') && (AsciiGuidBuffer[Index] <= 'F'))) {\r
+        continue;\r
+      } else {\r
+        break;\r
+      }\r
+    }\r
+  }\r
+  \r
+  if (Index < 36) {\r
+    Error (NULL, 0, 1003, "Invalid option value", "Incorrect GUID \"%s\"\n  Correct Format \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"", AsciiGuidBuffer);\r
+    return EFI_ABORTED;\r
+  }\r
+  \r
   //\r
   // Scan the guid string into the buffer\r
   //\r
@@ -409,7 +433,7 @@ Returns:
   // Verify the correct number of items were scanned.\r
   //\r
   if (Index != 11) {\r
-    printf ("ERROR: Malformed GUID \"%s\".\n\n", AsciiGuidBuffer);\r
+    Error (NULL, 0, 1003, "Invalid option value", "Incorrect GUID \"%s\"\n  Correct Format \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"", AsciiGuidBuffer);\r
     return EFI_ABORTED;\r
   }\r
   //\r
index 78e28ca..5ec2aff 100644 (file)
@@ -315,7 +315,7 @@ Returns:
 }\r
 \r
 \r
-EFI_STATUS\r
+VOID\r
 FreeStringList (\r
   IN STRING_LIST       *StringList\r
   )\r
@@ -331,14 +331,9 @@ Arguments:
 \r
 Returns:\r
 \r
-  EFI_STATUS\r
-\r
+  VOID\r
 --*/\r
 {\r
-  UINTN Count;\r
-  UINTN Length;\r
-  CHAR8 *NewString;\r
-\r
   while (StringList->Count > 0) {\r
     RemoveLastStringFromList (StringList);\r
   }\r
@@ -396,10 +391,12 @@ Returns:
     strcat (NewString, "\"");\r
   }\r
   strcat (NewString, "]");\r
+  \r
+  return NewString;\r
 }\r
 \r
 \r
-EFI_STATUS\r
+VOID\r
 PrintStringList (\r
   IN STRING_LIST       *StringList\r
   )\r
index 2a19807..219cfc9 100644 (file)
@@ -191,7 +191,7 @@ Returns:
 --*/\r
 \r
 \r
-EFI_STATUS\r
+VOID\r
 FreeStringList (\r
   IN STRING_LIST       *StringList\r
   )\r
@@ -236,7 +236,7 @@ Returns:
 --*/\r
 \r
 \r
-EFI_STATUS\r
+VOID\r
 PrintStringList (\r
   IN STRING_LIST       *StringList\r
   )\r
@@ -251,10 +251,6 @@ Arguments:
 \r
   StringList        The string list to print\r
 \r
-Returns:\r
-\r
-  EFI_STATUS\r
-\r
 --*/\r
 \r
 \r
index 786be0d..e6b834c 100644 (file)
@@ -134,13 +134,13 @@ Returns:
                         EFI_FV_FILETYPE_FIRMWARE_VOLUME_IMAGE.\n");\r
   fprintf (stdout, "  -g FileGuid, --fileguid FileGuid\n\\r
                         FileGuid is one module guid.\n\\r
-                        Its format is 00000000-0000-0000-0000-000000000000\n");\r
+                        Its format is xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\n");\r
   fprintf (stdout, "  -x, --fixed           Indicates that the file may not be moved\n\\r
                         from its present location.\n");\r
   fprintf (stdout, "  -s, --checksum        Indicates to calculate file checksum.\n");\r
   fprintf (stdout, "  -a FileAlign, --align FileAlign\n\\r
                         FileAlign points to file alignment, which only support\n\\r
-                        the following align: 8,16,128,512,1K,4K,32K,64K\n");\r
+                        the following align: 1,2,4,8,16,128,512,1K,4K,32K,64K\n");\r
   fprintf (stdout, "  -i SectionFile, --sectionfile SectionFile\n\\r
                         Section file will be contained in this FFS file.\n");\r
   fprintf (stdout, "  -n SectionAlign, --sectionalign SectionAlign\n\\r
@@ -476,7 +476,7 @@ Returns:
     if ((stricmp (argv[0], "-t") == 0) || (stricmp (argv[0], "--filetype") == 0)) {\r
       FfsFiletype = StringToType (argv[1]);\r
       if (FfsFiletype == EFI_FV_FILETYPE_ALL) {\r
-        Error (NULL, 0, 1003, "Invalid option value", "%s = %s", argv[0], argv[1]);\r
+        Error (NULL, 0, 1003, "Invalid option value", "file type can't be NULL");\r
         goto Finish;\r
       }\r
       argc -= 2;\r
@@ -486,6 +486,10 @@ Returns:
 \r
     if ((stricmp (argv[0], "-o") == 0) || (stricmp (argv[0], "--outputfile") == 0)) {\r
       OutputFileName = argv[1];\r
+      if (OutputFileName == NULL) {\r
+        Error (NULL, 0, 1003, "Invalid option value", "Output file can't be NULL");\r
+        goto Finish;\r
+      }\r
       argc -= 2;\r
       argv += 2;\r
       continue; \r
@@ -517,14 +521,25 @@ Returns:
     }\r
 \r
     if ((stricmp (argv[0], "-a") == 0) || (stricmp (argv[0], "--align") == 0)) {\r
+      if (argv[1] == NULL) {\r
+        Error (NULL, 0, 1003, "Invalid option value", "%s = %s", argv[0], argv[1]);\r
+        goto Finish;\r
+      }\r
       for (Index = 0; Index < sizeof (mFfsValidAlignName) / sizeof (CHAR8 *); Index ++) {\r
         if (stricmp (argv[1], mFfsValidAlignName[Index]) == 0) {\r
           break;\r
         }\r
       }\r
       if (Index == sizeof (mFfsValidAlignName) / sizeof (CHAR8 *)) {\r
-        Error (NULL, 0, 1003, "Invalid option value", "%s = %s", argv[0], argv[1]);\r
-        goto Finish;\r
+        if ((stricmp (argv[1], "1") == 0) || (stricmp (argv[1], "2") == 0) || (stricmp (argv[1], "4") == 0)) {\r
+          //\r
+          // 1, 2, 4 byte alignment same to 8 byte alignment\r
+          //\r
+          Index = 0;\r
+        } else {\r
+          Error (NULL, 0, 1003, "Invalid option value", "%s = %s", argv[0], argv[1]);\r
+          goto Finish;\r
+        }\r
       }\r
       FfsAlign = Index;\r
       argc -= 2;\r
@@ -536,7 +551,11 @@ Returns:
       //\r
       // Get Input file name and its alignment\r
       //\r
-      \r
+      if (argv[1] == NULL) {\r
+        Error (NULL, 0, 1003, "Invalid option value", "input section file can't be null");\r
+        goto Finish;\r
+      }\r
+\r
       //\r
       // Allocate Input file name buffer and its alignment buffer.\r
       //\r
index 5fdaa7c..f822f99 100644 (file)
@@ -217,6 +217,10 @@ Returns:
   while (argc > 0) {\r
     if ((stricmp (argv[0], "-i") == 0) || (stricmp (argv[0], "--inputfile") == 0)) {\r
       InfFileName = argv[1];\r
+      if (InfFileName == NULL) {\r
+        Error (NULL, 0, 1003, "Invalid option value", "Input file can't be null");\r
+        return STATUS_ERROR;\r
+      }\r
       argc -= 2;\r
       argv += 2;\r
       continue; \r
@@ -224,6 +228,10 @@ Returns:
 \r
     if ((stricmp (argv[0], "-a") == 0) || (stricmp (argv[0], "--addrfile") == 0)) {\r
       AddrFileName = argv[1];\r
+      if (AddrFileName == NULL) {\r
+        Error (NULL, 0, 1003, "Invalid option value", "Address file can't be null");\r
+        return STATUS_ERROR;\r
+      }\r
       argc -= 2;\r
       argv += 2;\r
       continue; \r
@@ -231,6 +239,10 @@ Returns:
 \r
     if ((stricmp (argv[0], "-o") == 0) || (stricmp (argv[0], "--outputfile") == 0)) {\r
       OutFileName = argv[1];\r
+      if (OutFileName == NULL) {\r
+        Error (NULL, 0, 1003, "Invalid option value", "Output file can't be null");\r
+        return STATUS_ERROR;\r
+      }\r
       argc -= 2;\r
       argv += 2;\r
       continue; \r
@@ -263,6 +275,10 @@ Returns:
 \r
     if ((stricmp (argv[0], "-m") == 0) || (stricmp (argv[0], "--map") == 0)) {\r
       MapFileName = argv[1];\r
+      if (MapFileName == NULL) {\r
+        Error (NULL, 0, 1003, "Invalid option value", "Map file can't be null");\r
+        return STATUS_ERROR;\r
+      }\r
       argc -= 2;\r
       argv += 2;\r
       continue; \r
index ed456d4..b4076ce 100644 (file)
@@ -104,7 +104,7 @@ typedef struct {
   UINTN  Reserved[3];\r
 } MICROCODE_IMAGE_HEADER;\r
 \r
-STATIC UINT8 *mInImageName;\r
+STATIC CHAR8 *mInImageName;\r
 \r
 STATIC\r
 EFI_STATUS\r
@@ -203,7 +203,8 @@ Returns:
   fprintf (stdout, "  -r, --replace         Overwrite the input file with the output content.\n");\r
   fprintf (stdout, "  -s timedate, --stamp timedate\n\\r
                         timedate format is \"yyyy-mm-dd 00:00:00\". if timedata \n\\r
-                        is set to NOW, current system time is used.\n");\r
+                        is set to NOW, current system time is used. The support\n\\r
+                        date scope is 1970-1-1 0:0:0 ~ 2038-1-19 3:14:07\n");\r
   fprintf (stdout, "  -m, --mcifile         Convert input microcode txt file to microcode bin file.\n");\r
   fprintf (stdout, "  -j, --join            Combine multi microcode bin files to one file.\n");\r
   fprintf (stdout, "  -a NUM, --align NUM   NUM is one HEX or DEC format alignment value.\n");\r
@@ -645,6 +646,7 @@ ScanSections(
   NtHdr->OptionalHeader.SizeOfInitializedData = RelocOffset - DataOffset;\r
   NtHdr->OptionalHeader.SizeOfUninitializedData = 0;\r
   NtHdr->OptionalHeader.AddressOfEntryPoint = CoffEntry;\r
+\r
   NtHdr->OptionalHeader.BaseOfCode = TextOffset;\r
 \r
   NtHdr->OptionalHeader.BaseOfData = DataOffset;\r
@@ -919,26 +921,32 @@ ConvertElf (
   if (!CheckElfHeader())\r
     return;\r
 \r
+  VerboseMsg ("Check Efl Image Header");\r
   //\r
   // Compute sections new address.\r
   //\r
   ScanSections();\r
+  \r
+  VerboseMsg ("Compute sections new address.");\r
 \r
   //\r
   // Write and relocate sections.\r
   //\r
   WriteSections(IsTextShdr);\r
   WriteSections(IsDataShdr);\r
+  VerboseMsg ("Write and relocate sections.");\r
 \r
   //\r
   // Translate and write relocations.\r
   //\r
   WriteRelocations();\r
+  VerboseMsg ("Translate and write relocations.");\r
 \r
   //\r
   // Write debug info.\r
   //\r
   WriteDebug();\r
+  VerboseMsg ("Write debug info.");\r
 \r
   NtHdr = (EFI_IMAGE_NT_HEADERS *)(CoffFile + NtHdrOffset);\r
   NtHdr->OptionalHeader.SizeOfImage = CoffOffset;\r
@@ -1069,6 +1077,10 @@ Returns:
   while (argc > 0) {\r
     if ((stricmp (argv[0], "-o") == 0) || (stricmp (argv[0], "--outputfile") == 0)) {\r
       OutImageName = argv[1];\r
+      if (OutImageName == NULL) {\r
+        Error (NULL, 0, 1003, "Invalid option value", "Output file name can't be NULL");\r
+        goto Finish;\r
+      }\r
       argc -= 2;\r
       argv += 2;\r
       continue; \r
@@ -1076,6 +1088,10 @@ Returns:
 \r
     if ((stricmp (argv[0], "-e") == 0) || (stricmp (argv[0], "--efiImage") == 0)) {\r
       ModuleType   = argv[1];\r
+      if (ModuleType == NULL) {\r
+        Error (NULL, 0, 1003, "Invalid option value", "Module Type can't be NULL");\r
+        goto Finish;        \r
+      }\r
       if (OutImageType != FW_TE_IMAGE) {\r
         OutImageType = FW_EFI_IMAGE;\r
       }\r
@@ -1764,6 +1780,7 @@ Returns:
   if (OutImageType == FW_ZERO_DEBUG_IMAGE) {\r
     Status = ZeroDebugData (FileBuffer);\r
     if (EFI_ERROR (Status)) {\r
+      Error (NULL, 0, 3000, "Invalid", "Zero DebugData Error status is 0x%lx", (UINTN) Status);\r
       goto Finish;\r
     }\r
     \r
@@ -1783,6 +1800,7 @@ Returns:
   if (OutImageType == FW_SET_STAMP_IMAGE) {\r
     Status = SetStamp (FileBuffer, TimeStamp);\r
     if (EFI_ERROR (Status)) {\r
+      Error (NULL, 0, 3000, "Invalid", "SetStamp Error status is 0x%lx", (UINTN) Status);\r
       goto Finish;\r
     }\r
     \r
@@ -2076,6 +2094,19 @@ WriteFile:
   VerboseMsg ("the size of output file is %d bytes", FileLength);\r
 \r
 Finish:\r
+  if (fpInOut != NULL) {\r
+    if (GetUtilityStatus () != STATUS_SUCCESS) {\r
+      //\r
+      // when file updates failed, original file is still recoveried.\r
+      //\r
+      fwrite (FileBuffer, 1, FileLength, fpInOut);\r
+    }\r
+    //\r
+    // Write converted data into fpInOut file and close input file.\r
+    //\r
+    fclose (fpInOut);\r
+  }\r
+\r
   if (FileBuffer != NULL) {\r
     free (FileBuffer);\r
   }\r
@@ -2090,14 +2121,7 @@ Finish:
     //\r
     fclose (fpOut);\r
   }\r
-\r
-  if (fpInOut != NULL) {\r
-    //\r
-    // Write converted data into fpInOut file and close input file.\r
-    //\r
-    fclose (fpInOut);\r
-  }\r
-  \r
\r
   VerboseMsg ("%s tool done with return code is 0x%x.", UTILITY_NAME, GetUtilityStatus ());\r
   \r
   return GetUtilityStatus ();\r
@@ -2271,13 +2295,17 @@ Returns:
             &stime.tm_min,\r
             &stime.tm_sec\r
             ) != 6) {\r
-      Error (NULL, 0, 3000, "Invalid", "%s Invalid date or time!", TimeStamp);\r
+      Error (NULL, 0, 3000, "Invalid", "%s Invalid or unsupported datetime!", TimeStamp);\r
       return EFI_INVALID_PARAMETER;\r
     }\r
 \r
     //\r
     // in struct, Month (0 - 11; Jan = 0). So decrease 1 from it\r
     //\r
+    if (stime.tm_mon <= 0 || stime.tm_mday <=0) {\r
+      Error (NULL, 0, 3000, "Invalid", "%s Invalid date!", TimeStamp);\r
+      return EFI_INVALID_PARAMETER;      \r
+    }\r
     stime.tm_mon -= 1;\r
   \r
     //\r
@@ -2287,13 +2315,14 @@ Returns:
     //\r
     // convert 0 -> 100 (2000), 1 -> 101 (2001), ..., 38 -> 138 (2038)\r
     //\r
-    if (stime.tm_year <= 38) {\r
-      stime.tm_year += 100;\r
-    } else if (stime.tm_year >= 1970) {\r
+    if (stime.tm_year >= 1970 && stime.tm_year <= 2038) {\r
       //\r
       // convert 1970 -> 70, 2000 -> 100, ...\r
       //\r
       stime.tm_year -= 1900;\r
+    } else {\r
+      Error (NULL, 0, 3000, "Invalid", "%s Invalid or unsupported datetime!", TimeStamp);\r
+      return EFI_INVALID_PARAMETER;\r
     }\r
 \r
     //\r
@@ -2301,7 +2330,7 @@ Returns:
     //\r
     newtime = mktime (&stime);\r
     if (newtime == (time_t) - 1) {\r
-      Error (NULL, 0, 3000, "Invalid", "%s Invalid date or time!", TimeStamp);\r
+      Error (NULL, 0, 3000, "Invalid", "%s Invalid or unsupported datetime!", TimeStamp);\r
       return EFI_INVALID_PARAMETER;\r
     }\r
   }\r
index 8603479..eb13500 100644 (file)
@@ -73,7 +73,9 @@ STATIC CHAR8      *mSectionTypeName[] = {
 };\r
 \r
 STATIC CHAR8      *mCompressionTypeName[]    = { "PI_NONE", "PI_STD" };\r
-STATIC CHAR8      *mGUIDedSectionAttribue[]  = { NULL, "PROCESSING_REQUIRED", "AUTH_STATUS_VALID"};\r
+\r
+#define EFI_GUIDED_SECTION_NONE 0x80\r
+STATIC CHAR8      *mGUIDedSectionAttribue[]  = { "NONE", "PROCESSING_REQUIRED", "AUTH_STATUS_VALID"};\r
 \r
 //\r
 // Crc32 GUID section related definitions.\r
@@ -155,19 +157,20 @@ Returns:
                         EFI_SECTION_USER_INTERFACE, EFI_SECTION_VERSION,\n\\r
                         EFI_SECTION_FIRMWARE_VOLUME_IMAGE, EFI_SECTION_RAW,\n\\r
                         EFI_SECTION_FREEFORM_SUBTYPE_GUID,\n\\r
-                        EFI_SECTION_PEI_DEPEX. if sectiontype is not given, \n\\r
-                        EFI_SECTION_ALL is default type.\n");\r
+                        EFI_SECTION_PEI_DEPEX. if -s option is not given, \n\\r
+                        EFI_SECTION_ALL is default section type.\n");\r
   fprintf (stdout, "  -c [Type], --compress [Type]\n\\r
                         Compress method type can be PI_NONE or PI_STD.\n\\r
-                        if Type is not given, PI_STD is default type.\n"); \r
+                        if -c option is not given, PI_STD is default type.\n"); \r
   fprintf (stdout, "  -g GuidValue, --vendor GuidValue\n\\r
                         GuidValue is one specific vendor guid value.\n\\r
-                        Its format is 00000000-0000-0000-0000-000000000000\n");\r
+                        Its format is xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\n");\r
   fprintf (stdout, "  -l GuidHeaderLength, --HeaderLength GuidHeaderLength\n\\r
                         GuidHeaderLength is the size of header of guided data\n");\r
   fprintf (stdout, "  -r GuidAttr, --attributes GuidAttr\n\\r
                         GuidAttr is guid section atttributes, which may be\n\\r
-                        PROCESSING_REQUIRED or AUTH_STATUS_VALID\n");\r
+                        PROCESSING_REQUIRED, AUTH_STATUS_VALID and NONE. \n\\r
+                        if -r option is not given, default PROCESSING_REQUIRED\n");\r
   fprintf (stdout, "  -n String, --name String\n\\r
                         String is a NULL terminated string used in Ui section.\n");\r
   fprintf (stdout, "  -j Number, --buildnumber Number\n\\r
@@ -826,6 +829,10 @@ Returns:
   while (argc > 0) {\r
     if ((stricmp (argv[0], "-s") == 0) || (stricmp (argv[0], "--SectionType") == 0)) {\r
       SectionName = argv[1];\r
+      if (SectionName == NULL) {\r
+        Error (NULL, 0, 1003, "Invalid option value", "Section Type can't be NULL");\r
+        goto Finish;\r
+      }\r
       argc -= 2;\r
       argv += 2;\r
       continue; \r
@@ -833,6 +840,10 @@ Returns:
 \r
     if ((stricmp (argv[0], "-o") == 0) || (stricmp (argv[0], "--outputfile") == 0)) {\r
       OutputFileName = argv[1];\r
+      if (OutputFileName == NULL) {\r
+        Error (NULL, 0, 1003, "Invalid option value", "Output file can't be NULL");\r
+        goto Finish;\r
+      }\r
       argc -= 2;\r
       argv += 2;\r
       continue; \r
@@ -840,6 +851,10 @@ Returns:
 \r
     if ((stricmp (argv[0], "-c") == 0) || (stricmp (argv[0], "--compress") == 0)) {\r
       CompressionName = argv[1];\r
+      if (CompressionName == NULL) {\r
+        Error (NULL, 0, 1003, "Invalid option value", "Compression Type can't be NULL");\r
+        goto Finish;\r
+      }\r
       argc -= 2;\r
       argv += 2;\r
       continue;\r
@@ -861,6 +876,11 @@ Returns:
         SectGuidAttribute |= EFI_GUIDED_SECTION_PROCESSING_REQUIRED;\r
       } else if (stricmp (argv[1], mGUIDedSectionAttribue[EFI_GUIDED_SECTION_AUTH_STATUS_VALID]) == 0) {\r
         SectGuidAttribute |= EFI_GUIDED_SECTION_AUTH_STATUS_VALID;\r
+      } else if (stricmp (argv[1], mGUIDedSectionAttribue[0]) == 0) {\r
+        //\r
+        // NONE attribute\r
+        //\r
+        SectGuidAttribute |= EFI_GUIDED_SECTION_NONE;\r
       } else {\r
         Error (NULL, 0, 1003, "Invalid option value", "%s = %s", argv[0], argv[1]);\r
         goto Finish;\r
@@ -883,12 +903,20 @@ Returns:
 \r
     if ((stricmp (argv[0], "-n") == 0) || (stricmp (argv[0], "--name") == 0)) {\r
       StringBuffer = argv[1];\r
+      if (StringBuffer == NULL) {\r
+        Error (NULL, 0, 1003, "Invalid option value", "Name can't be NULL");\r
+        goto Finish;\r
+      }\r
       argc -= 2;\r
       argv += 2;\r
       continue;\r
     }\r
 \r
     if ((stricmp (argv[0], "-j") == 0) || (stricmp (argv[0], "--buildnumber") == 0)) {\r
+      if (argv[1] == NULL) {\r
+        Error (NULL, 0, 1003, "Invalid option value", "build number can't be NULL");\r
+        goto Finish;\r
+      }\r
       //\r
       // Verify string is a integrator number\r
       //\r
@@ -1008,6 +1036,12 @@ Returns:
     if (SectGuidAttribute == 0) {\r
       SectGuidAttribute = EFI_GUIDED_SECTION_PROCESSING_REQUIRED;\r
     }\r
+    if ((SectGuidAttribute & EFI_GUIDED_SECTION_NONE) != 0) {\r
+      //\r
+      // NONE attribute, clear attribute value.\r
+      //\r
+      SectGuidAttribute = 0;\r
+    }\r
     VerboseMsg ("Vendor Guid is %08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X", \r
                 VendorGuid.Data1,\r
                 VendorGuid.Data2,\r
@@ -1066,6 +1100,13 @@ Returns:
     goto Finish;\r
   }\r
   \r
+  //\r
+  // GuidValue is only required by Guided section.\r
+  //\r
+  if ((SectType != EFI_SECTION_GUID_DEFINED) && (CompareGuid (&VendorGuid, &mZeroGuid) != 0)) {\r
+    fprintf (stdout, "Warning: the input guid value is not required for this section type %s\n", SectionName);\r
+  }\r
+  \r
   //\r
   // Check whether there is input file\r
   //  \r
@@ -1094,7 +1135,6 @@ Returns:
   //\r
   // Open output file\r
   //\r
-  remove(OutputFileName);\r
   OutFile = fopen (OutputFileName, "wb");\r
   if (OutFile == NULL) {\r
     Error (NULL, 0, 0001, "Error opening file", OutputFileName);\r