]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Add check for the validity of resource directory address.
authorqhuang8 <qhuang8@6f19259b-4bc3-4df7-8a09-765794883524>
Thu, 23 Apr 2009 12:14:55 +0000 (12:14 +0000)
committerqhuang8 <qhuang8@6f19259b-4bc3-4df7-8a09-765794883524>
Thu, 23 Apr 2009 12:14:55 +0000 (12:14 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8164 6f19259b-4bc3-4df7-8a09-765794883524

MdePkg/Library/BasePeCoffLib/BasePeCoff.c

index 3ecc015eaca271148efb1f85be6afeb2344a3950..e3a7b5387be29b71b0e34ddaf5eaf8a59cd06897 100644 (file)
@@ -67,7 +67,7 @@ PeCoffLoaderGetPeHeader (
   UINT16                Magic;\r
 \r
   //\r
-  // Read the DOS image header to check for it's existance\r
+  // Read the DOS image header to check for its existence\r
   //\r
   Size = sizeof (EFI_IMAGE_DOS_HEADER);\r
   Status = ImageContext->ImageRead (\r
@@ -1169,49 +1169,49 @@ PeCoffLoaderLoadImage (
 \r
     if (DirectoryEntry->Size != 0) {\r
       Base = PeCoffLoaderImageAddress (ImageContext, DirectoryEntry->VirtualAddress);\r
-\r
-      ResourceDirectory = (EFI_IMAGE_RESOURCE_DIRECTORY *) Base;\r
-      ResourceDirectoryEntry = (EFI_IMAGE_RESOURCE_DIRECTORY_ENTRY *) (ResourceDirectory + 1);\r
-\r
-      for (Index = 0; Index < ResourceDirectory->NumberOfNamedEntries; Index++) {\r
-        if (ResourceDirectoryEntry->u1.s.NameIsString) {\r
-          ResourceDirectoryString = (EFI_IMAGE_RESOURCE_DIRECTORY_STRING *) (Base + ResourceDirectoryEntry->u1.s.NameOffset);\r
-\r
-          if (ResourceDirectoryString->Length == 3 &&\r
-              ResourceDirectoryString->String[0] == L'H' &&\r
-              ResourceDirectoryString->String[1] == L'I' &&\r
-              ResourceDirectoryString->String[2] == L'I') {\r
-            //\r
-            // Resource Type "HII" found\r
-            //\r
-            if (ResourceDirectoryEntry->u2.s.DataIsDirectory) {\r
+      if (Base != NULL) {\r
+        ResourceDirectory = (EFI_IMAGE_RESOURCE_DIRECTORY *) Base;\r
+        ResourceDirectoryEntry = (EFI_IMAGE_RESOURCE_DIRECTORY_ENTRY *) (ResourceDirectory + 1);\r
+\r
+        for (Index = 0; Index < ResourceDirectory->NumberOfNamedEntries; Index++) {\r
+          if (ResourceDirectoryEntry->u1.s.NameIsString) {\r
+            ResourceDirectoryString = (EFI_IMAGE_RESOURCE_DIRECTORY_STRING *) (Base + ResourceDirectoryEntry->u1.s.NameOffset);\r
+\r
+            if (ResourceDirectoryString->Length == 3 &&\r
+                ResourceDirectoryString->String[0] == L'H' &&\r
+                ResourceDirectoryString->String[1] == L'I' &&\r
+                ResourceDirectoryString->String[2] == L'I') {\r
               //\r
-              // Move to next level - resource Name\r
+              // Resource Type "HII" found\r
               //\r
-              ResourceDirectory = (EFI_IMAGE_RESOURCE_DIRECTORY *) (Base + ResourceDirectoryEntry->u2.s.OffsetToDirectory);\r
-              ResourceDirectoryEntry = (EFI_IMAGE_RESOURCE_DIRECTORY_ENTRY *) (ResourceDirectory + 1);\r
-\r
               if (ResourceDirectoryEntry->u2.s.DataIsDirectory) {\r
                 //\r
-                // Move to next level - resource Language\r
+                // Move to next level - resource Name\r
                 //\r
                 ResourceDirectory = (EFI_IMAGE_RESOURCE_DIRECTORY *) (Base + ResourceDirectoryEntry->u2.s.OffsetToDirectory);\r
                 ResourceDirectoryEntry = (EFI_IMAGE_RESOURCE_DIRECTORY_ENTRY *) (ResourceDirectory + 1);\r
+\r
+                if (ResourceDirectoryEntry->u2.s.DataIsDirectory) {\r
+                  //\r
+                  // Move to next level - resource Language\r
+                  //\r
+                  ResourceDirectory = (EFI_IMAGE_RESOURCE_DIRECTORY *) (Base + ResourceDirectoryEntry->u2.s.OffsetToDirectory);\r
+                  ResourceDirectoryEntry = (EFI_IMAGE_RESOURCE_DIRECTORY_ENTRY *) (ResourceDirectory + 1);\r
+                }\r
               }\r
-            }\r
 \r
-            //\r
-            // Now it ought to be resource Data\r
-            //\r
-            if (!ResourceDirectoryEntry->u2.s.DataIsDirectory) {\r
-              ResourceDataEntry = (EFI_IMAGE_RESOURCE_DATA_ENTRY *) (Base + ResourceDirectoryEntry->u2.OffsetToData);\r
-              ImageContext->HiiResourceData = (PHYSICAL_ADDRESS) (UINTN) PeCoffLoaderImageAddress (ImageContext, ResourceDataEntry->OffsetToData);\r
-              break;\r
+              //\r
+              // Now it ought to be resource Data\r
+              //\r
+              if (!ResourceDirectoryEntry->u2.s.DataIsDirectory) {\r
+                ResourceDataEntry = (EFI_IMAGE_RESOURCE_DATA_ENTRY *) (Base + ResourceDirectoryEntry->u2.OffsetToData);\r
+                ImageContext->HiiResourceData = (PHYSICAL_ADDRESS) (UINTN) PeCoffLoaderImageAddress (ImageContext, ResourceDataEntry->OffsetToData);\r
+                break;\r
+              }\r
             }\r
           }\r
+          ResourceDirectoryEntry++;\r
         }\r
-\r
-        ResourceDirectoryEntry++;\r
       }\r
     }\r
   }\r