MdeModulePkg/UdfDxe: Use error handling for memory allocation failure

REF:https://bugzilla.tianocore.org/show_bug.cgi?id=1247

For functions DuplicateFid() and DuplicateFe(), this commit will use error
handling logic instead of ASSERTs for memory allocation failure.

Cc: Ruiyu Ni <ruiyu.ni@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Hao Wu <hao.a.wu@intel.com>
Reviewed-by: Paulo Alcantara <palcantara@suse.de>
Reviewed-by: Star Zeng <star.zeng@intel.com>
This commit is contained in:
Hao Wu 2018-09-28 20:12:23 +08:00
parent 3a0329bed2
commit ebb12f5142
1 changed files with 34 additions and 6 deletions

View File

@ -468,8 +468,6 @@ DuplicateFid (
*NewFileIdentifierDesc = *NewFileIdentifierDesc =
(UDF_FILE_IDENTIFIER_DESCRIPTOR *)AllocateCopyPool ( (UDF_FILE_IDENTIFIER_DESCRIPTOR *)AllocateCopyPool (
(UINTN) GetFidDescriptorLength (FileIdentifierDesc), FileIdentifierDesc); (UINTN) GetFidDescriptorLength (FileIdentifierDesc), FileIdentifierDesc);
ASSERT (*NewFileIdentifierDesc != NULL);
} }
/** /**
@ -490,8 +488,6 @@ DuplicateFe (
) )
{ {
*NewFileEntry = AllocateCopyPool (Volume->FileEntrySize, FileEntry); *NewFileEntry = AllocateCopyPool (Volume->FileEntrySize, FileEntry);
ASSERT (*NewFileEntry != NULL);
} }
/** /**
@ -1370,7 +1366,15 @@ InternalFindFile (
} }
DuplicateFe (BlockIo, Volume, Parent->FileEntry, &File->FileEntry); DuplicateFe (BlockIo, Volume, Parent->FileEntry, &File->FileEntry);
if (File->FileEntry == NULL) {
return EFI_OUT_OF_RESOURCES;
}
DuplicateFid (Parent->FileIdentifierDesc, &File->FileIdentifierDesc); DuplicateFid (Parent->FileIdentifierDesc, &File->FileIdentifierDesc);
if (File->FileIdentifierDesc == NULL) {
FreePool (File->FileEntry);
return EFI_OUT_OF_RESOURCES;
}
return EFI_SUCCESS; return EFI_SUCCESS;
} }
@ -1732,9 +1736,20 @@ FindFile (
// We've already a file pointer (Root) for the root directory. Duplicate // We've already a file pointer (Root) for the root directory. Duplicate
// its FE/EFE and FID descriptors. // its FE/EFE and FID descriptors.
// //
DuplicateFe (BlockIo, Volume, Root->FileEntry, &File->FileEntry);
DuplicateFid (Root->FileIdentifierDesc, &File->FileIdentifierDesc);
Status = EFI_SUCCESS; Status = EFI_SUCCESS;
DuplicateFe (BlockIo, Volume, Root->FileEntry, &File->FileEntry);
if (File->FileEntry == NULL) {
Status = EFI_OUT_OF_RESOURCES;
} else {
//
// File->FileEntry is not NULL.
//
DuplicateFid (Root->FileIdentifierDesc, &File->FileIdentifierDesc);
if (File->FileIdentifierDesc == NULL) {
FreePool (File->FileEntry);
Status = EFI_OUT_OF_RESOURCES;
}
}
} }
} else { } else {
// //
@ -1874,6 +1889,9 @@ ReadDirectoryEntry (
} while (FileIdentifierDesc->FileCharacteristics & DELETED_FILE); } while (FileIdentifierDesc->FileCharacteristics & DELETED_FILE);
DuplicateFid (FileIdentifierDesc, FoundFid); DuplicateFid (FileIdentifierDesc, FoundFid);
if (*FoundFid == NULL) {
return EFI_OUT_OF_RESOURCES;
}
return EFI_SUCCESS; return EFI_SUCCESS;
} }
@ -2031,8 +2049,18 @@ ResolveSymlink (
// "." (current file). Duplicate both FE/EFE and FID of this file. // "." (current file). Duplicate both FE/EFE and FID of this file.
// //
DuplicateFe (BlockIo, Volume, PreviousFile.FileEntry, &File->FileEntry); DuplicateFe (BlockIo, Volume, PreviousFile.FileEntry, &File->FileEntry);
if (File->FileEntry == NULL) {
Status = EFI_OUT_OF_RESOURCES;
goto Error_Find_File;
}
DuplicateFid (PreviousFile.FileIdentifierDesc, DuplicateFid (PreviousFile.FileIdentifierDesc,
&File->FileIdentifierDesc); &File->FileIdentifierDesc);
if (File->FileIdentifierDesc == NULL) {
FreePool (File->FileEntry);
Status = EFI_OUT_OF_RESOURCES;
goto Error_Find_File;
}
goto Next_Path_Component; goto Next_Path_Component;
case 5: case 5:
// //