]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Source/TianoTools/GenDepex/GenDepex.c
Added code to clear "Buffer" before using it. This is supposed to fix the odd issue...
[mirror_edk2.git] / Tools / Source / TianoTools / GenDepex / GenDepex.c
index 2a65e086fcafa923e9375c92a5b7d442219ba9d8..3818649330555051e951ae5883c11833d6b76d13 100644 (file)
@@ -209,7 +209,7 @@ EFI_STATUS
 GenerateDependencyExpression (\r
   IN     FILE           *InFile,\r
   IN OUT FILE           *OutFile,\r
-  IN     UINT8          Padding  OPTIONAL\r
+  IN     INT8           Padding  OPTIONAL\r
   )\r
 /*++\r
 \r
@@ -374,6 +374,7 @@ Returns:
     return EFI_ABORTED;\r
   }\r
 \r
+  memset (Buffer, 0, FileSize + BUFFER_SIZE);\r
   fread (Buffer, FileSize, 1, InFile);\r
 \r
   Ptrx    = Buffer;\r
@@ -690,21 +691,33 @@ Returns:
         Ptrx++;\r
       }\r
 \r
-      ArgCountParsed = sscanf (\r
-                        Ptrx,\r
-                                               "%x, %x, %x, { %x, %x, %x, %x, %x, %x, %x, %x }",\r
-                        &Guid.Data1,\r
-                        &Guid.Data2,\r
-                        &Guid.Data3,\r
-                        &Guid.Data4[0],\r
-                        &Guid.Data4[1],\r
-                        &Guid.Data4[2],\r
-                        &Guid.Data4[3],\r
-                        &Guid.Data4[4],\r
-                        &Guid.Data4[5],\r
-                        &Guid.Data4[6],\r
-                        &Guid.Data4[7]\r
-                        );\r
+      {\r
+        int byte_index;\r
+        // This is an array of UINT32s. sscanf will trash memory\r
+        // if you try to read into a UINT8 with a %x formatter.\r
+        UINT32 Guid_Data4[8];\r
+\r
+        ArgCountParsed = sscanf (\r
+                         Ptrx,\r
+            "%x, %x, %x, { %x, %x, %x, %x, %x, %x, %x, %x }",\r
+                         &Guid.Data1,\r
+                         &Guid.Data2,\r
+                         &Guid.Data3,\r
+                         &Guid_Data4[0],\r
+                         &Guid_Data4[1],\r
+                         &Guid_Data4[2],\r
+                         &Guid_Data4[3],\r
+                         &Guid_Data4[4],\r
+                         &Guid_Data4[5],\r
+                         &Guid_Data4[6],\r
+                         &Guid_Data4[7]\r
+                         );\r
+        \r
+        // Now we can copy the 32 bit ints into the GUID.\r
+        for (byte_index=0; byte_index<8; byte_index++) {\r
+          Guid.Data4[byte_index] = (UINT8) Guid_Data4[byte_index];\r
+        }\r
+      }\r
 \r
       if (ArgCountParsed != 11) {\r
         printf ("We have found an illegal GUID\n");\r
@@ -716,11 +729,11 @@ Returns:
         Ptrx++;\r
       }\r
 \r
-         Ptrx++;\r
+    Ptrx++;\r
       while (*Ptrx != '}') {\r
         Ptrx++;\r
       }\r
-         //\r
+    //\r
       // Absorb the closing }\r
       //\r
       Ptrx++;\r
@@ -842,16 +855,6 @@ Returns:
   Output_Flag = FALSE;\r
   Pad_Flag    = FALSE;\r
 \r
-  //\r
-  //  Output the calling arguments\r
-  //\r
-  printf ("\n\n");\r
-  for (Index = 0; Index < argc; Index++) {\r
-    printf ("%s ", argv[Index]);\r
-  }\r
-\r
-  printf ("\n\n");\r
-\r
   if (argc < 5) {\r
     printf ("Not enough arguments\n");\r
     PrintGenDepexUsageInfo ();\r