Fix one bug in GenFw tool (Memory access exceed) reported by Tian Feng
authorlgao4 <lgao4@7335b38e-4728-0410-8992-fb3ffe349368>
Sun, 30 Sep 2007 05:50:26 +0000 (05:50 +0000)
committerlgao4 <lgao4@7335b38e-4728-0410-8992-fb3ffe349368>
Sun, 30 Sep 2007 05:50:26 +0000 (05:50 +0000)
git-svn-id: https://buildtools.tianocore.org/svn/buildtools/trunk/BaseTools@792 7335b38e-4728-0410-8992-fb3ffe349368

Source/C/GenFv/GenFv.c
Source/C/GenFv/GenFvInternalLib.c
Source/C/GenFw/GenFw.c

index 7d0d163..6edca28 100644 (file)
@@ -179,7 +179,7 @@ Returns:
   InfFileImage  = NULL;\r
   OutFileName   = NULL;\r
   MapFileName   = NULL;\r
-  XipBase       = -1;\r
+  XipBase       = 0;\r
   BtBase        = 0;\r
   RtBase        = 0;\r
   InfFileSize   = 0;\r
@@ -431,7 +431,7 @@ Returns:
       );\r
   } else {\r
     VerboseMsg ("Create Fv image and its map file");\r
-    if (XipBase != -1) {\r
+    if (XipBase != 0) {\r
       VerboseMsg ("FvImage Rebase Address is 0x%X", XipBase);\r
     }\r
     //\r
index e2715f9..eda74b8 100644 (file)
@@ -187,7 +187,6 @@ Returns:
   // Initialize FV info\r
   //\r
   memset (FvInfo, 0, sizeof (FV_INFO));\r
-  FvInfo->BaseAddress = -1;\r
 \r
   //\r
   // Read the FV base address\r
@@ -1496,7 +1495,7 @@ Returns:
   //\r
   // Update FvImage Base Address, XipBase not same to BtBase, RtBase address.\r
   //\r
-  if (XipBaseAddress != -1) {\r
+  if (XipBaseAddress != 0) {\r
     FvInfo.BaseAddress = XipBaseAddress;\r
   }\r
   if (*BtBaseAddress != 0) {\r
@@ -1996,7 +1995,7 @@ Returns:
   //\r
   Flags = 0;\r
 \r
-  if (FvInfo->BaseAddress != -1) {\r
+  if (FvInfo->BaseAddress != 0) {\r
     Flags  |= REBASE_XIP_FILE;\r
     XipBase = FvInfo->BaseAddress + XipOffset;\r
   }\r
index e6836b5..aa73688 100644 (file)
@@ -424,7 +424,11 @@ UINT32 CoffOffset;
 //
 // Result Coff file in memory.
 //
-UINT8 *CoffFile;
+UINT8 *CoffFile = NULL;
+//
+// ELF sections to offset in Coff file.
+//
+UINT32 *CoffSectionsOffset = NULL;\r
 
 //
 // Offset in Coff file of headers and sections.
@@ -435,11 +439,6 @@ UINT32 TextOffset;
 UINT32 DataOffset;
 UINT32 RelocOffset;
 
-//
-// ELF sections to offset in Coff file.
-//
-UINT32 *CoffSectionsOffset;
-
 EFI_IMAGE_BASE_RELOCATION *CoffBaseRel;
 UINT16 *CoffEntryRel;
 
@@ -939,7 +938,14 @@ ConvertElf (
   //
   free(*FileBuffer);
   *FileBuffer = CoffFile;
-  *FileLength = CoffOffset;
+  *FileLength = CoffOffset;\r
+  \r
+  //\r
+  // Free memory space\r
+  //\r
+  if (CoffSectionsOffset != NULL) {\r
+    free (CoffSectionsOffset);\r
+  }
 }
 #endif // HAVE_ELF
 
@@ -1368,7 +1374,6 @@ Returns:
         FileLength += sizeof (Data);\r
       }\r
     } while (Status == STATUS_SUCCESS);\r
-\r
     //\r
     // Error if no data.\r
     //\r
@@ -2297,7 +2302,6 @@ Returns:
   CHAR8  *cptr;\r
 \r
   Line[MAX_LINE_LEN - 1]  = 0;\r
-  *Data                   = 0;\r
   if (fgets (Line, MAX_LINE_LEN, InFptr) == NULL) {\r
     return STATUS_ERROR;\r
   }\r