]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/C/VolInfo/VolInfo.c
BaseTools/VolInfo: Provide string width in '%s' specifier in format string
[mirror_edk2.git] / BaseTools / Source / C / VolInfo / VolInfo.c
index 5da658298e17aca8af7150ec0555d618e31707cd..5285acdb97f9ebe4cbfd1ed06fc13a5da983225e 100644 (file)
@@ -258,6 +258,14 @@ Returns:
       continue;\r
     }\r
     if ((stricmp (argv[0], "--hash") == 0)) {\r
+      if (EnableHash == TRUE) {\r
+        //\r
+        // --hash already given in the option, ignore this one\r
+        //\r
+        argc --;\r
+        argv ++;\r
+        continue;\r
+      }\r
       EnableHash = TRUE;\r
       OpenSslCommand = "openssl";\r
       OpenSslEnv = getenv("OPENSSL_PATH");\r
@@ -1784,8 +1792,14 @@ Returns:
         }\r
 \r
         ScratchBuffer       = malloc (ScratchSize);\r
+        if (ScratchBuffer == NULL) {\r
+          Error (NULL, 0, 4001, "Resource", "memory cannot be allocated!");\r
+          return EFI_OUT_OF_RESOURCES;\r
+        }\r
         UncompressedBuffer  = malloc (UncompressedLength);\r
-        if ((ScratchBuffer == NULL) || (UncompressedBuffer == NULL)) {\r
+        if (UncompressedBuffer == NULL) {\r
+          free (ScratchBuffer);\r
+          Error (NULL, 0, 4001, "Resource", "memory cannot be allocated!");\r
           return EFI_OUT_OF_RESOURCES;\r
         }\r
         Status = DecompressFunction (\r
@@ -2164,6 +2178,8 @@ Returns:
 {\r
   FILE              *Fptr;\r
   CHAR8             Line[MAX_LINE_LEN];\r
+  CHAR8             *FormatString;\r
+  INTN              FormatLength;\r
   GUID_TO_BASENAME  *GPtr;\r
 \r
   if ((Fptr = fopen (LongFilePath (FileName), "r")) == NULL) {\r
@@ -2171,17 +2187,44 @@ Returns:
     return EFI_DEVICE_ERROR;\r
   }\r
 \r
+  //\r
+  // Generate the format string for fscanf\r
+  //\r
+  FormatLength = snprintf (\r
+                   NULL,\r
+                   0,\r
+                   "%%%us %%%us",\r
+                   (unsigned) sizeof (GPtr->Guid) - 1,\r
+                   (unsigned) sizeof (GPtr->BaseName) - 1\r
+                   ) + 1;\r
+\r
+  FormatString = (CHAR8 *) malloc (FormatLength);\r
+  if (FormatString == NULL) {\r
+    fclose (Fptr);\r
+    return EFI_OUT_OF_RESOURCES;\r
+  }\r
+\r
+  snprintf (\r
+    FormatString,\r
+    FormatLength,\r
+    "%%%us %%%us",\r
+    (unsigned) sizeof (GPtr->Guid) - 1,\r
+    (unsigned) sizeof (GPtr->BaseName) - 1\r
+    );\r
+\r
   while (fgets (Line, sizeof (Line), Fptr) != NULL) {\r
     //\r
     // Allocate space for another guid/basename element\r
     //\r
     GPtr = malloc (sizeof (GUID_TO_BASENAME));\r
     if (GPtr == NULL) {\r
+      free (FormatString);\r
+      fclose (Fptr);\r
       return EFI_OUT_OF_RESOURCES;\r
     }\r
 \r
     memset ((char *) GPtr, 0, sizeof (GUID_TO_BASENAME));\r
-    if (sscanf (Line, "%s %s", GPtr->Guid, GPtr->BaseName) == 2) {\r
+    if (sscanf (Line, FormatString, GPtr->Guid, GPtr->BaseName) == 2) {\r
       GPtr->Next        = mGuidBaseNameList;\r
       mGuidBaseNameList = GPtr;\r
     } else {\r
@@ -2192,6 +2235,7 @@ Returns:
     }\r
   }\r
 \r
+  free (FormatString);\r
   fclose (Fptr);\r
   return EFI_SUCCESS;\r
 }\r