]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Disk/UdfDxe/FileSystemOperations.c
MdeModulePkg/UdfDxe: Use error handling for memory allocation failure
[mirror_edk2.git] / MdeModulePkg / Universal / Disk / UdfDxe / FileSystemOperations.c
index ecc172303e75cbcad8e2999d8464b75648c1a334..638f31bd821832d3cec4fa19652611220a026ce9 100644 (file)
@@ -468,8 +468,6 @@ DuplicateFid (
   *NewFileIdentifierDesc =\r
     (UDF_FILE_IDENTIFIER_DESCRIPTOR *)AllocateCopyPool (\r
       (UINTN) GetFidDescriptorLength (FileIdentifierDesc), FileIdentifierDesc);\r
-\r
-  ASSERT (*NewFileIdentifierDesc != NULL);\r
 }\r
 \r
 /**\r
@@ -490,8 +488,6 @@ DuplicateFe (
   )\r
 {\r
   *NewFileEntry = AllocateCopyPool (Volume->FileEntrySize, FileEntry);\r
-\r
-  ASSERT (*NewFileEntry != NULL);\r
 }\r
 \r
 /**\r
@@ -1370,7 +1366,15 @@ InternalFindFile (
     }\r
 \r
     DuplicateFe (BlockIo, Volume, Parent->FileEntry, &File->FileEntry);\r
+    if (File->FileEntry == NULL) {\r
+      return EFI_OUT_OF_RESOURCES;\r
+    }\r
+\r
     DuplicateFid (Parent->FileIdentifierDesc, &File->FileIdentifierDesc);\r
+    if (File->FileIdentifierDesc == NULL) {\r
+      FreePool (File->FileEntry);\r
+      return EFI_OUT_OF_RESOURCES;\r
+    }\r
 \r
     return EFI_SUCCESS;\r
   }\r
@@ -1732,9 +1736,20 @@ FindFile (
         // We've already a file pointer (Root) for the root directory. Duplicate\r
         // its FE/EFE and FID descriptors.\r
         //\r
-        DuplicateFe (BlockIo, Volume, Root->FileEntry, &File->FileEntry);\r
-        DuplicateFid (Root->FileIdentifierDesc, &File->FileIdentifierDesc);\r
         Status = EFI_SUCCESS;\r
+        DuplicateFe (BlockIo, Volume, Root->FileEntry, &File->FileEntry);\r
+        if (File->FileEntry == NULL) {\r
+          Status = EFI_OUT_OF_RESOURCES;\r
+        } else {\r
+          //\r
+          // File->FileEntry is not NULL.\r
+          //\r
+          DuplicateFid (Root->FileIdentifierDesc, &File->FileIdentifierDesc);\r
+          if (File->FileIdentifierDesc == NULL) {\r
+            FreePool (File->FileEntry);\r
+            Status = EFI_OUT_OF_RESOURCES;\r
+          }\r
+        }\r
       }\r
     } else {\r
       //\r
@@ -1874,6 +1889,9 @@ ReadDirectoryEntry (
   } while (FileIdentifierDesc->FileCharacteristics & DELETED_FILE);\r
 \r
   DuplicateFid (FileIdentifierDesc, FoundFid);\r
+  if (*FoundFid == NULL) {\r
+    return EFI_OUT_OF_RESOURCES;\r
+  }\r
 \r
   return EFI_SUCCESS;\r
 }\r
@@ -2031,8 +2049,18 @@ ResolveSymlink (
       // "." (current file). Duplicate both FE/EFE and FID of this file.\r
       //\r
       DuplicateFe (BlockIo, Volume, PreviousFile.FileEntry, &File->FileEntry);\r
+      if (File->FileEntry == NULL) {\r
+        Status = EFI_OUT_OF_RESOURCES;\r
+        goto Error_Find_File;\r
+      }\r
+\r
       DuplicateFid (PreviousFile.FileIdentifierDesc,\r
                     &File->FileIdentifierDesc);\r
+      if (File->FileIdentifierDesc == NULL) {\r
+        FreePool (File->FileEntry);\r
+        Status = EFI_OUT_OF_RESOURCES;\r
+        goto Error_Find_File;\r
+      }\r
       goto Next_Path_Component;\r
     case 5:\r
       //\r