prevents "" from being the result of trying to open the root of a drive.
more input validation on vol command. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11444 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
@ -585,7 +585,11 @@ EfiShellGetDevicePathFromFilePath(
|
|||||||
//
|
//
|
||||||
// build the full device path
|
// build the full device path
|
||||||
//
|
//
|
||||||
|
if (*(Path+StrLen(MapName)+1) == CHAR_NULL) {
|
||||||
|
DevicePathForReturn = FileDevicePath(Handle, L"\\");
|
||||||
|
} else {
|
||||||
DevicePathForReturn = FileDevicePath(Handle, Path+StrLen(MapName)+1);
|
DevicePathForReturn = FileDevicePath(Handle, Path+StrLen(MapName)+1);
|
||||||
|
}
|
||||||
|
|
||||||
FreePool(MapName);
|
FreePool(MapName);
|
||||||
if (DevicePathCopyForFree != NULL) {
|
if (DevicePathCopyForFree != NULL) {
|
||||||
|
@ -108,12 +108,23 @@ HandleVol(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SysInfoSize = 0;
|
||||||
|
SysInfo = NULL;
|
||||||
|
|
||||||
|
Status = EfiFpHandle->GetInfo(
|
||||||
|
EfiFpHandle,
|
||||||
|
&gEfiFileSystemInfoGuid,
|
||||||
|
&SysInfoSize,
|
||||||
|
SysInfo);
|
||||||
|
|
||||||
|
if (Status == EFI_BUFFER_TOO_SMALL) {
|
||||||
SysInfo = AllocateZeroPool(SysInfoSize);
|
SysInfo = AllocateZeroPool(SysInfoSize);
|
||||||
Status = EfiFpHandle->GetInfo(
|
Status = EfiFpHandle->GetInfo(
|
||||||
EfiFpHandle,
|
EfiFpHandle,
|
||||||
&gEfiFileSystemInfoGuid,
|
&gEfiFileSystemInfoGuid,
|
||||||
&SysInfoSize,
|
&SysInfoSize,
|
||||||
SysInfo);
|
SysInfo);
|
||||||
|
}
|
||||||
|
|
||||||
gEfiShellProtocol->CloseFile(ShellFileHandle);
|
gEfiShellProtocol->CloseFile(ShellFileHandle);
|
||||||
|
|
||||||
@ -164,6 +175,7 @@ ShellCommandRunVol (
|
|||||||
CONST CHAR16 *CurDir;
|
CONST CHAR16 *CurDir;
|
||||||
BOOLEAN DeleteMode;
|
BOOLEAN DeleteMode;
|
||||||
CHAR16 *FullPath;
|
CHAR16 *FullPath;
|
||||||
|
CHAR16 *TempSpot;
|
||||||
UINTN Length;
|
UINTN Length;
|
||||||
|
|
||||||
Length = 0;
|
Length = 0;
|
||||||
@ -220,10 +232,16 @@ ShellCommandRunVol (
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (PathName != NULL) {
|
if (PathName != NULL) {
|
||||||
StrnCatGrow(&FullPath, &Length, PathName, StrStr(PathName, L"\\")==NULL?0:StrStr(PathName, L"\\")-PathName+1);
|
TempSpot = StrStr(PathName, L":");
|
||||||
if (StrStr(FullPath, L":\\") == NULL) {
|
if (TempSpot != NULL) {
|
||||||
StrnCatGrow(&FullPath, &Length, L":\\", 0);
|
*TempSpot = CHAR_NULL;
|
||||||
}
|
}
|
||||||
|
TempSpot = StrStr(PathName, L"\\");
|
||||||
|
if (TempSpot != NULL) {
|
||||||
|
*TempSpot = CHAR_NULL;
|
||||||
|
}
|
||||||
|
StrnCatGrow(&FullPath, &Length, PathName, 0);
|
||||||
|
StrnCatGrow(&FullPath, &Length, L":\\", 0);
|
||||||
DeleteMode = ShellCommandLineGetFlag(Package, L"-d");
|
DeleteMode = ShellCommandLineGetFlag(Package, L"-d");
|
||||||
if (DeleteMode && ShellCommandLineGetFlag(Package, L"-n")) {
|
if (DeleteMode && ShellCommandLineGetFlag(Package, L"-n")) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_CON), gShellLevel2HiiHandle);
|
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_CON), gShellLevel2HiiHandle);
|
||||||
|
Reference in New Issue
Block a user