Revision: 13716
          http://edk2.svn.sourceforge.net/edk2/?rev=13716&view=rev
Author:   ydong10
Date:     2012-09-11 10:53:37 +0000 (Tue, 11 Sep 2012)
Log Message:
-----------
Enhance the error code info.

Signed-off-by: Dong Eric <[email protected]>
Reviewed-by: Ye Ting <[email protected]>

Modified Paths:
--------------
    trunk/edk2/MdePkg/Include/Library/PeCoffLib.h
    trunk/edk2/MdePkg/Library/BasePeCoffLib/BasePeCoff.c

Modified: trunk/edk2/MdePkg/Include/Library/PeCoffLib.h
===================================================================
--- trunk/edk2/MdePkg/Include/Library/PeCoffLib.h       2012-09-11 10:26:44 UTC 
(rev 13715)
+++ trunk/edk2/MdePkg/Include/Library/PeCoffLib.h       2012-09-11 10:53:37 UTC 
(rev 13716)
@@ -34,6 +34,7 @@
 #define IMAGE_ERROR_SECTION_NOT_LOADED           8
 #define IMAGE_ERROR_FAILED_RELOCATION            9
 #define IMAGE_ERROR_FAILED_ICACHE_FLUSH          10
+#define IMAGE_ERROR_UNSUPPORTED                  11
 
 /**
   Reads contents of a PE/COFF image.

Modified: trunk/edk2/MdePkg/Library/BasePeCoffLib/BasePeCoff.c
===================================================================
--- trunk/edk2/MdePkg/Library/BasePeCoffLib/BasePeCoff.c        2012-09-11 
10:26:44 UTC (rev 13715)
+++ trunk/edk2/MdePkg/Library/BasePeCoffLib/BasePeCoff.c        2012-09-11 
10:53:37 UTC (rev 13716)
@@ -104,6 +104,9 @@
                            );
   if (RETURN_ERROR (Status) || (Size != ReadSize)) {
     ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
+    if (Size != ReadSize) {
+      Status = RETURN_UNSUPPORTED;
+    }
     return Status;
   }
 
@@ -132,6 +135,9 @@
                            );
   if (RETURN_ERROR (Status) || (Size != ReadSize)) {
     ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
+    if (Size != ReadSize) {
+      Status = RETURN_UNSUPPORTED;
+    }
     return Status;
   }
 
@@ -161,6 +167,7 @@
       // 1. Check FileHeader.SizeOfOptionalHeader filed.
       //
       if (EFI_IMAGE_NUMBER_OF_DIRECTORY_ENTRIES < 
Hdr.Pe32->OptionalHeader.NumberOfRvaAndSizes) {
+        ImageContext->ImageError = IMAGE_ERROR_UNSUPPORTED;
         return RETURN_UNSUPPORTED;
       }
 
@@ -171,6 +178,7 @@
       //
       if (EFI_IMAGE_DIRECTORY_ENTRY_SECURITY + 1 < 
Hdr.Pe32->OptionalHeader.NumberOfRvaAndSizes) {
         if (Hdr.Pe32->OptionalHeader.SizeOfHeaders < (UINT32)((UINT8 
*)(&Hdr.Pe32->OptionalHeader.DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_SECURITY + 
1]) - (UINT8 *) &Hdr)) {
+          ImageContext->ImageError = IMAGE_ERROR_UNSUPPORTED;
           return RETURN_UNSUPPORTED;
         }
       }
@@ -187,6 +195,10 @@
                                &BufferData
                                );
       if (RETURN_ERROR (Status) || (Size != ReadSize)) {
+        ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
+        if (Size != ReadSize) {
+          Status = RETURN_UNSUPPORTED;
+        }
         return Status;
       }
 
@@ -202,7 +214,8 @@
           //
           if ((UINT32) (~0) - 
Hdr.Pe32->OptionalHeader.DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_SECURITY].VirtualAddress
 <
               
Hdr.Pe32->OptionalHeader.DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_SECURITY].Size)
 {
-            return RETURN_INVALID_PARAMETER;
+            ImageContext->ImageError = IMAGE_ERROR_UNSUPPORTED;
+            return RETURN_UNSUPPORTED;
           }
 
           //
@@ -218,6 +231,10 @@
                                    &BufferData
                                    );
           if (RETURN_ERROR (Status) || (Size != ReadSize)) {
+            ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
+            if (Size != ReadSize) {
+              Status = RETURN_UNSUPPORTED;
+            }
             return Status;
           }
         }
@@ -236,6 +253,7 @@
       // 1. Check FileHeader.SizeOfOptionalHeader filed.
       //
       if (EFI_IMAGE_NUMBER_OF_DIRECTORY_ENTRIES < 
Hdr.Pe32Plus->OptionalHeader.NumberOfRvaAndSizes) {
+        ImageContext->ImageError = IMAGE_ERROR_UNSUPPORTED;
         return RETURN_UNSUPPORTED;
       }
 
@@ -246,6 +264,7 @@
       //
       if (EFI_IMAGE_DIRECTORY_ENTRY_SECURITY + 1 < 
Hdr.Pe32Plus->OptionalHeader.NumberOfRvaAndSizes) {
         if (Hdr.Pe32Plus->OptionalHeader.SizeOfHeaders < (UINT32)((UINT8 
*)(&Hdr.Pe32Plus->OptionalHeader.DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_SECURITY
 + 1]) - (UINT8 *) &Hdr)) {
+          ImageContext->ImageError = IMAGE_ERROR_UNSUPPORTED;
           return RETURN_UNSUPPORTED;
         }
       }
@@ -262,6 +281,10 @@
                                &BufferData
                                );
       if (RETURN_ERROR (Status) || (Size != ReadSize)) {
+        ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
+        if (Size != ReadSize) {
+          Status = RETURN_UNSUPPORTED;
+        }
         return Status;
       }
 
@@ -277,7 +300,8 @@
           //
           if ((UINT32) (~0) - 
Hdr.Pe32Plus->OptionalHeader.DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_SECURITY].VirtualAddress
 <
               
Hdr.Pe32Plus->OptionalHeader.DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_SECURITY].Size)
 {
-            return RETURN_INVALID_PARAMETER;
+            ImageContext->ImageError = IMAGE_ERROR_UNSUPPORTED;
+            return RETURN_UNSUPPORTED;
           }
 
           //
@@ -293,6 +317,10 @@
                                    &BufferData
                                    );
           if (RETURN_ERROR (Status) || (Size != ReadSize)) {
+            ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
+            if (Size != ReadSize) {
+              Status = RETURN_UNSUPPORTED;
+            }
             return Status;
           }
         }
@@ -348,6 +376,10 @@
                              &SectionHeader
                              );
     if (RETURN_ERROR (Status) || (Size != ReadSize)) {
+      ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
+      if (Size != ReadSize) {
+        Status = RETURN_UNSUPPORTED;
+      }
       return Status;
     }
 
@@ -356,7 +388,8 @@
       // Check the member data to avoid overflow.
       //
       if ((UINT32) (~0) - SectionHeader.PointerToRawData < 
SectionHeader.SizeOfRawData) {
-        return RETURN_INVALID_PARAMETER;
+        ImageContext->ImageError = IMAGE_ERROR_UNSUPPORTED;
+        return RETURN_UNSUPPORTED;
       }
 
       //
@@ -372,6 +405,10 @@
                                &BufferData
                                );
       if (RETURN_ERROR (Status) || (Size != ReadSize)) {
+        ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
+        if (Size != ReadSize) {
+          Status = RETURN_UNSUPPORTED;
+        }
         return Status;
       }
     }
@@ -507,7 +544,8 @@
   // This case is not a valid TE image. 
   //
   if ((ImageContext->IsTeImage) && (Hdr.Te->DataDirectory[0].Size != 0) && 
(Hdr.Te->DataDirectory[0].VirtualAddress == 0)) {
-    return RETURN_INVALID_PARAMETER;
+    ImageContext->ImageError = IMAGE_ERROR_UNSUPPORTED;
+    return RETURN_UNSUPPORTED;
   }
 
   if (!(ImageContext->IsTeImage)) {
@@ -557,6 +595,9 @@
                                  );
         if (RETURN_ERROR (Status) || (Size != ReadSize)) {
           ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
+          if (Size != ReadSize) {
+            Status = RETURN_UNSUPPORTED;
+          }
           return Status;
         }
 
@@ -585,6 +626,9 @@
                                    );
           if (RETURN_ERROR (Status) || (Size != ReadSize)) {
             ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
+            if (Size != ReadSize) {
+              Status = RETURN_UNSUPPORTED;
+            }
             return Status;
           }
           if (DebugEntry.Type == EFI_IMAGE_DEBUG_TYPE_CODEVIEW) {
@@ -620,6 +664,9 @@
                                );
       if (RETURN_ERROR (Status) || (Size != ReadSize)) {
         ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
+        if (Size != ReadSize) {
+          Status = RETURN_UNSUPPORTED;
+        }
         return Status;
       }
 
@@ -674,6 +721,9 @@
                                  );
         if (RETURN_ERROR (Status) || (Size != ReadSize)) {
           ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
+          if (Size != ReadSize) {
+            Status = RETURN_UNSUPPORTED;
+          }
           return Status;
         }
 

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
edk2-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-commits

Reply via email to