mirror of https://github.com/acidanthera/audk.git
Enhance the check for debug data before get the PdbPointer.
Signed-off-by: Dong Eric <eric.dong@intel.com> Reviewed-by: Ye Ting <ting.ye@intel.com> git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13961 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
6c2f76ed70
commit
36b48bf641
|
@ -631,6 +631,12 @@ PeCoffLoaderGetImageInfo (
|
||||||
}
|
}
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// From PeCoff spec, when DebugEntry.RVA == 0 means this debug info will not load into memory.
|
||||||
|
// Here we will always load EFI_IMAGE_DEBUG_TYPE_CODEVIEW type debug info. so need adjust the
|
||||||
|
// ImageContext->ImageSize when DebugEntry.RVA == 0.
|
||||||
|
//
|
||||||
if (DebugEntry.Type == EFI_IMAGE_DEBUG_TYPE_CODEVIEW) {
|
if (DebugEntry.Type == EFI_IMAGE_DEBUG_TYPE_CODEVIEW) {
|
||||||
ImageContext->DebugDirectoryEntryRva = (UINT32) (DebugDirectoryEntryRva + Index);
|
ImageContext->DebugDirectoryEntryRva = (UINT32) (DebugDirectoryEntryRva + Index);
|
||||||
if (DebugEntry.RVA == 0 && DebugEntry.FileOffset != 0) {
|
if (DebugEntry.RVA == 0 && DebugEntry.FileOffset != 0) {
|
||||||
|
@ -1437,14 +1443,26 @@ PeCoffLoaderLoadImage (
|
||||||
|
|
||||||
switch (*(UINT32 *) ImageContext->CodeView) {
|
switch (*(UINT32 *) ImageContext->CodeView) {
|
||||||
case CODEVIEW_SIGNATURE_NB10:
|
case CODEVIEW_SIGNATURE_NB10:
|
||||||
|
if (DebugEntry->SizeOfData < sizeof (EFI_IMAGE_DEBUG_CODEVIEW_NB10_ENTRY)) {
|
||||||
|
ImageContext->ImageError = IMAGE_ERROR_UNSUPPORTED;
|
||||||
|
return RETURN_UNSUPPORTED;
|
||||||
|
}
|
||||||
ImageContext->PdbPointer = (CHAR8 *)ImageContext->CodeView + sizeof (EFI_IMAGE_DEBUG_CODEVIEW_NB10_ENTRY);
|
ImageContext->PdbPointer = (CHAR8 *)ImageContext->CodeView + sizeof (EFI_IMAGE_DEBUG_CODEVIEW_NB10_ENTRY);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CODEVIEW_SIGNATURE_RSDS:
|
case CODEVIEW_SIGNATURE_RSDS:
|
||||||
|
if (DebugEntry->SizeOfData < sizeof (EFI_IMAGE_DEBUG_CODEVIEW_RSDS_ENTRY)) {
|
||||||
|
ImageContext->ImageError = IMAGE_ERROR_UNSUPPORTED;
|
||||||
|
return RETURN_UNSUPPORTED;
|
||||||
|
}
|
||||||
ImageContext->PdbPointer = (CHAR8 *)ImageContext->CodeView + sizeof (EFI_IMAGE_DEBUG_CODEVIEW_RSDS_ENTRY);
|
ImageContext->PdbPointer = (CHAR8 *)ImageContext->CodeView + sizeof (EFI_IMAGE_DEBUG_CODEVIEW_RSDS_ENTRY);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CODEVIEW_SIGNATURE_MTOC:
|
case CODEVIEW_SIGNATURE_MTOC:
|
||||||
|
if (DebugEntry->SizeOfData < sizeof (EFI_IMAGE_DEBUG_CODEVIEW_MTOC_ENTRY)) {
|
||||||
|
ImageContext->ImageError = IMAGE_ERROR_UNSUPPORTED;
|
||||||
|
return RETURN_UNSUPPORTED;
|
||||||
|
}
|
||||||
ImageContext->PdbPointer = (CHAR8 *)ImageContext->CodeView + sizeof (EFI_IMAGE_DEBUG_CODEVIEW_MTOC_ENTRY);
|
ImageContext->PdbPointer = (CHAR8 *)ImageContext->CodeView + sizeof (EFI_IMAGE_DEBUG_CODEVIEW_MTOC_ENTRY);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue