]> git.proxmox.com Git - mirror_edk2.git/commitdiff
MdeModulePkg/FvSimpleFileSystem: fix assertions when FV is empty
authorFeng Tian <feng.tian@intel.com>
Tue, 2 Aug 2016 08:07:23 +0000 (16:07 +0800)
committerFeng Tian <feng.tian@intel.com>
Wed, 3 Aug 2016 01:48:18 +0000 (09:48 +0800)
The original code will assert when dealing with those empty FVs.
The fix is used to solve this bug.

Cc: Chao Zhang <chao.b.zhang@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Feng Tian <feng.tian@intel.com>
Reviewed-by: Chao Zhang <chao.b.zhang@intel.com>
MdeModulePkg/Universal/FvSimpleFileSystemDxe/FvSimpleFileSystem.c
MdeModulePkg/Universal/FvSimpleFileSystemDxe/FvSimpleFileSystemEntryPoint.c

index c6137aca1f5fdacf836227daf9995a50e37b6797..b81110ff980ca9b60c81074220441333290b7d57 100644 (file)
@@ -526,7 +526,10 @@ FvSimpleFileSystemOpen (
     InitializeListHead (&NewFile->Link);\r
     InsertHeadList (&Instance->FileHead, &NewFile->Link);\r
 \r
-    NewFile->DirReadNext = FVFS_GET_FIRST_FILE_INFO (Instance);\r
+    NewFile->DirReadNext = NULL;\r
+    if (!IsListEmpty (&Instance->FileInfoHead)) {\r
+      NewFile->DirReadNext = FVFS_GET_FIRST_FILE_INFO (Instance);\r
+    }\r
 \r
     *NewHandle = &NewFile->FileProtocol;\r
     return EFI_SUCCESS;\r
@@ -821,7 +824,9 @@ FvSimpleFileSystemSetPosition (
     //\r
     // Reset directory position to first entry\r
     //\r
-    File->DirReadNext = FVFS_GET_FIRST_FILE_INFO (Instance);\r
+    if (File->DirReadNext) {\r
+      File->DirReadNext = FVFS_GET_FIRST_FILE_INFO (Instance); \r
+    }\r
   } else if (Position == 0xFFFFFFFFFFFFFFFFull) {\r
     File->Position = File->FvFileInfo->FileInfo.FileSize;\r
   } else {\r
index 7167fb950b1ea36d849e1fb7754b1471993a0c31..4e6089b057192c268117a6df9c564e03b44dd81b 100644 (file)
@@ -223,7 +223,11 @@ FvSimpleFileSystemOpenVolume (
     }\r
   }\r
 \r
-  Instance->Root->DirReadNext = FVFS_GET_FIRST_FILE_INFO (Instance);\r
+  Instance->Root->DirReadNext = NULL;\r
+  if (!IsListEmpty (&Instance->FileInfoHead)) {\r
+    Instance->Root->DirReadNext = FVFS_GET_FIRST_FILE_INFO (Instance);\r
+  }\r
+\r
   *RootFile = &Instance->Root->FileProtocol;\r
   return Status;\r
 }\r