]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Nt32Pkg/WinNtSimpleFileSystemDxe/WinNtSimpleFileSystem.c
Nt32Pkg/WinNtSimpleFileSystemDxe: Fix ASSERT() parsing '\'
[mirror_edk2.git] / Nt32Pkg / WinNtSimpleFileSystemDxe / WinNtSimpleFileSystem.c
index f248ccb9331f1a254829b79e333ad231b14b0553..b687e9c95746fd644dd6c4e017e85fb51e8fba36 100644 (file)
@@ -1,6 +1,6 @@
 /**@file\r
 \r
-Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>\r
 This program and the accompanying materials\r
 are licensed and made available under the terms and conditions of the BSD License\r
 which accompanies this distribution.  The full text of the license may be found at\r
@@ -628,6 +628,7 @@ Returns:
   StrCat (TempFileName, L"\\*");\r
 \r
   PrivateFile->LHandle = PrivateFile->WinNtThunk->FindFirstFile (TempFileName, &PrivateFile->FindBuf);\r
+  FreePool (TempFileName);\r
 \r
   if (PrivateFile->LHandle == INVALID_HANDLE_VALUE) {\r
     PrivateFile->IsValidFindBuf = FALSE;\r
@@ -747,6 +748,12 @@ GetNextFileNameToken (
     // Point *FileName to the next character after L'\'.\r
     //\r
     *FileName = *FileName + Offset + 1;\r
+    //\r
+    // If *FileName is an empty string, then set *FileName to NULL\r
+    //\r
+    if (**FileName == L'\0') {\r
+      *FileName = NULL;\r
+    }\r
   }\r
 \r
   return Token;\r
@@ -1188,6 +1195,7 @@ Returns:
         Status = EFI_NOT_FOUND;\r
       }\r
 \r
+      FreePool (TempFileName);\r
       goto Done;\r
     }\r
 \r
@@ -1196,6 +1204,7 @@ Returns:
     //\r
     StrCat (TempFileName, L"\\*");\r
     NewPrivateFile->LHandle = NewPrivateFile->WinNtThunk->FindFirstFile (TempFileName, &NewPrivateFile->FindBuf);\r
+    FreePool (TempFileName);\r
 \r
     if (NewPrivateFile->LHandle == INVALID_HANDLE_VALUE) {\r
       NewPrivateFile->IsValidFindBuf = FALSE;\r
@@ -1276,12 +1285,14 @@ Returns:
     Status = WinNtSimpleFileSystemGetInfo (&NewPrivateFile->EfiFile, &gEfiFileInfoGuid, &InfoSize, Info);\r
 \r
     if (EFI_ERROR (Status)) {\r
+      FreePool (Info);\r
       goto Done;\r
     }\r
 \r
     Info->Attribute = Attributes;\r
 \r
     WinNtSimpleFileSystemSetInfo (&NewPrivateFile->EfiFile, &gEfiFileInfoGuid, InfoSize, Info);\r
+    FreePool (Info);\r
   }\r
 \r
 Done:\r
@@ -1361,6 +1372,10 @@ Returns:
     FreePool (PrivateFile->FileName);\r
   }\r
 \r
+  if (PrivateFile->FilePath) {\r
+    FreePool (PrivateFile->FilePath);\r
+  }\r
+\r
   FreePool (PrivateFile);\r
 \r
   gBS->RestoreTPL (OldTpl);\r
@@ -1431,6 +1446,7 @@ Returns:
   }\r
 \r
   FreePool (PrivateFile->FileName);\r
+  FreePool (PrivateFile->FilePath);\r
   FreePool (PrivateFile);\r
 \r
   gBS->RestoreTPL (OldTpl);\r
@@ -1593,7 +1609,7 @@ Returns:
     Status = PrivateFile->WinNtThunk->ReadFile (\r
                                         PrivateFile->LHandle,\r
                                         Buffer,\r
-                                        *BufferSize,\r
+                                        (DWORD)*BufferSize,\r
                                         (LPDWORD)BufferSize,\r
                                         NULL\r
                                         ) ? EFI_SUCCESS : EFI_DEVICE_ERROR;\r
@@ -1764,7 +1780,7 @@ Returns:
   Status = PrivateFile->WinNtThunk->WriteFile (\r
                                       PrivateFile->LHandle,\r
                                       Buffer,\r
-                                      *BufferSize,\r
+                                      (DWORD)*BufferSize,\r
                                       (LPDWORD)BufferSize,\r
                                       NULL\r
                                       ) ? EFI_SUCCESS : EFI_DEVICE_ERROR;\r
@@ -1977,8 +1993,19 @@ Returns:
   CHAR16                      *TempPointer;\r
 \r
   Size        = SIZE_OF_EFI_FILE_INFO;\r
-  NameSize    = StrSize (PrivateFile->FileName);\r
-  ResultSize  = Size + NameSize;\r
+\r
+  RealFileName  = PrivateFile->FileName;\r
+  TempPointer   = RealFileName;\r
+  while (*TempPointer) {\r
+    if (*TempPointer == '\\') {\r
+      RealFileName = TempPointer + 1;\r
+    }\r
+\r
+    TempPointer++;\r
+  }\r
+  NameSize = StrSize (RealFileName);\r
+\r
+  ResultSize = Size + NameSize; \r
 \r
   Status      = EFI_BUFFER_TOO_SMALL;\r
   if (*BufferSize >= ResultSize) {\r
@@ -2046,17 +2073,6 @@ Returns:
       Info->Attribute |= EFI_FILE_DIRECTORY;\r
     }\r
 \r
-    RealFileName  = PrivateFile->FileName;\r
-    TempPointer   = RealFileName;\r
-\r
-    while (*TempPointer) {\r
-      if (*TempPointer == '\\') {\r
-        RealFileName = TempPointer + 1;\r
-      }\r
-\r
-      TempPointer++;\r
-    }\r
-\r
     if (PrivateFile->IsRootDirectory) {\r
       *((CHAR8 *) Buffer + Size) = 0;\r
     } else {\r
@@ -2350,12 +2366,12 @@ Returns:
   // Set file system information.\r
   //\r
   if (CompareGuid (InformationType, &gEfiFileSystemInfoGuid)) {\r
-    if (BufferSize < SIZE_OF_EFI_FILE_SYSTEM_INFO + StrSize (PrivateRoot->VolumeLabel)) {\r
+    NewFileSystemInfo = (EFI_FILE_SYSTEM_INFO *) Buffer;\r
+    if (BufferSize < SIZE_OF_EFI_FILE_SYSTEM_INFO + StrSize (NewFileSystemInfo->VolumeLabel)) {\r
       Status = EFI_BAD_BUFFER_SIZE;\r
       goto Done;\r
     }\r
 \r
-    NewFileSystemInfo = (EFI_FILE_SYSTEM_INFO *) Buffer;\r
 \r
     FreePool (PrivateRoot->VolumeLabel);\r
     PrivateRoot->VolumeLabel = AllocatePool (StrSize (NewFileSystemInfo->VolumeLabel));\r
@@ -2404,7 +2420,7 @@ Returns:
   //\r
   NewFileInfo = (EFI_FILE_INFO *) Buffer;\r
 \r
-  if (NewFileInfo->Size <= sizeof (EFI_FILE_INFO) ||\r
+  if ((NewFileInfo->Size <= SIZE_OF_EFI_FILE_INFO) ||\r
       (NewFileInfo->Attribute &~(EFI_FILE_VALID_ATTR)) ||\r
       (sizeof (UINTN) == 4 && NewFileInfo->Size > 0xFFFFFFFF)\r
       ) {\r