From 980d554e3ab6457a4f7a455fabcc297d6e93547f Mon Sep 17 00:00:00 2001 From: jcarsey Date: Tue, 29 Mar 2011 19:31:18 +0000 Subject: smbiosview - add user input verification. HexEdit/Edit - More user input verification for HexEdit. - updated title bar refreshment. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11448 6f19259b-4bc3-4df7-8a09-765794883524 --- .../HexEdit/BufferImage.c | 1 + .../UefiShellDebug1CommandsLib/HexEdit/DiskImage.c | 4 +- .../UefiShellDebug1CommandsLib/HexEdit/FileImage.c | 1 + .../UefiShellDebug1CommandsLib/HexEdit/HexEdit.c | 30 +++++-- .../HexEdit/MainHexEditor.c | 93 ++++++++++++++++------ 5 files changed, 97 insertions(+), 32 deletions(-) (limited to 'ShellPkg/Library/UefiShellDebug1CommandsLib/HexEdit') diff --git a/ShellPkg/Library/UefiShellDebug1CommandsLib/HexEdit/BufferImage.c b/ShellPkg/Library/UefiShellDebug1CommandsLib/HexEdit/BufferImage.c index 04ebd24edc..60e0b75435 100644 --- a/ShellPkg/Library/UefiShellDebug1CommandsLib/HexEdit/BufferImage.c +++ b/ShellPkg/Library/UefiShellDebug1CommandsLib/HexEdit/BufferImage.c @@ -954,6 +954,7 @@ HBufferImageRead ( // variable initialization // Status = EFI_SUCCESS; + HBufferImage.BufferType = BufferType; // // three types of buffer supported diff --git a/ShellPkg/Library/UefiShellDebug1CommandsLib/HexEdit/DiskImage.c b/ShellPkg/Library/UefiShellDebug1CommandsLib/HexEdit/DiskImage.c index 140db71671..86db6aadf2 100644 --- a/ShellPkg/Library/UefiShellDebug1CommandsLib/HexEdit/DiskImage.c +++ b/ShellPkg/Library/UefiShellDebug1CommandsLib/HexEdit/DiskImage.c @@ -219,6 +219,7 @@ Returns: { CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath; EFI_DEVICE_PATH_PROTOCOL *DupDevicePath; + EFI_DEVICE_PATH_PROTOCOL *DupDevicePathForFree; EFI_HANDLE Handle; EFI_BLOCK_IO_PROTOCOL *BlkIo; EFI_STATUS Status; @@ -241,11 +242,12 @@ Returns: return EFI_INVALID_PARAMETER; } DupDevicePath = DuplicateDevicePath(DevicePath); + DupDevicePathForFree = DupDevicePath; // // get blkio interface // Status = gBS->LocateDevicePath(&gEfiBlockIoProtocolGuid,&DupDevicePath,&Handle); - FreePool(DupDevicePath); + FreePool(DupDevicePathForFree); if (EFI_ERROR (Status)) { StatusBarSetStatusString (L"Read Disk Failed"); return Status; diff --git a/ShellPkg/Library/UefiShellDebug1CommandsLib/HexEdit/FileImage.c b/ShellPkg/Library/UefiShellDebug1CommandsLib/HexEdit/FileImage.c index adf7928197..57cefb882c 100644 --- a/ShellPkg/Library/UefiShellDebug1CommandsLib/HexEdit/FileImage.c +++ b/ShellPkg/Library/UefiShellDebug1CommandsLib/HexEdit/FileImage.c @@ -301,6 +301,7 @@ Returns: HBufferImage.HighBits = TRUE; HBufferImage.BufferPosition.Row = 1; HBufferImage.BufferPosition.Column = 1; + HBufferImage.BufferType = FileTypeFileBuffer; if (!Recover) { UnicodeBuffer = CatSPrint(NULL, L"%d Lines Read", HBufferImage.NumLines); diff --git a/ShellPkg/Library/UefiShellDebug1CommandsLib/HexEdit/HexEdit.c b/ShellPkg/Library/UefiShellDebug1CommandsLib/HexEdit/HexEdit.c index 511eb9e636..0a97a6ca29 100644 --- a/ShellPkg/Library/UefiShellDebug1CommandsLib/HexEdit/HexEdit.c +++ b/ShellPkg/Library/UefiShellDebug1CommandsLib/HexEdit/HexEdit.c @@ -44,7 +44,7 @@ ShellCommandRunHexEdit ( SHELL_STATUS ShellStatus; LIST_ENTRY *Package; CONST CHAR16 *Cwd; - CHAR16 *NFS; + CHAR16 *NewName; CHAR16 *Spot; CONST CHAR16 *Name; UINTN Offset; @@ -54,7 +54,7 @@ ShellCommandRunHexEdit ( Buffer = NULL; ShellStatus = SHELL_SUCCESS; - NFS = NULL; + NewName = NULL; Cwd = NULL; Buffer = NULL; Name = NULL; @@ -90,10 +90,7 @@ ShellCommandRunHexEdit ( // Check for -d // if (ShellCommandLineGetFlag(Package, L"-d")){ - if (ShellCommandLineGetCount(Package) < 4) { - ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle); - ShellStatus = SHELL_INVALID_PARAMETER; - } else if (ShellCommandLineGetCount(Package) > 4) { + if (ShellCommandLineGetCount(Package) > 4) { ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle); ShellStatus = SHELL_INVALID_PARAMETER; } else { @@ -138,7 +135,24 @@ ShellCommandRunHexEdit ( Size = ShellStrToUintn(ShellCommandLineGetRawValue(Package, 2)); } } - ShellCommandLineFreeVarList (Package); + if (WhatToDo == FileTypeNone && ShellCommandLineGetRawValue(Package, 1) != NULL) { + Name = ShellCommandLineGetRawValue(Package, 1); + if (!IsValidFileName(Name)) { + ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, Name); + ShellStatus = SHELL_INVALID_PARAMETER; + } else { + WhatToDo = FileTypeFileBuffer; + } + } else if (WhatToDo == FileTypeNone) { + if (gEfiShellProtocol->GetCurDir(NULL) == NULL) { + ShellStatus = SHELL_NOT_FOUND; + ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_CWD), gShellDebug1HiiHandle); + } else { + NewName = EditGetDefaultFileName(L"bin"); + Name = NewName; + WhatToDo = FileTypeFileBuffer; + } + } if (ShellStatus == SHELL_SUCCESS && WhatToDo == FileTypeNone) { ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle); @@ -240,8 +254,10 @@ ShellCommandRunHexEdit ( } } } + ShellCommandLineFreeVarList (Package); } SHELL_FREE_NON_NULL (Buffer); + SHELL_FREE_NON_NULL (NewName); return ShellStatus; } diff --git a/ShellPkg/Library/UefiShellDebug1CommandsLib/HexEdit/MainHexEditor.c b/ShellPkg/Library/UefiShellDebug1CommandsLib/HexEdit/MainHexEditor.c index 387a1e2d1e..961e0cca68 100644 --- a/ShellPkg/Library/UefiShellDebug1CommandsLib/HexEdit/MainHexEditor.c +++ b/ShellPkg/Library/UefiShellDebug1CommandsLib/HexEdit/MainHexEditor.c @@ -933,7 +933,9 @@ Returns: HMainEditor.BufferImage->FileImage->ReadOnly, FALSE, HMainEditor.ScreenSize.Column, - HMainEditor.ScreenSize.Row + HMainEditor.ScreenSize.Row, + HMainEditor.BufferImage->BufferType == FileTypeDiskBuffer?HMainEditor.BufferImage->DiskImage->Offset:HMainEditor.BufferImage->BufferType == FileTypeMemBuffer?HMainEditor.BufferImage->MemImage->Offset:0, + HMainEditor.BufferImage->BufferType == FileTypeDiskBuffer?HMainEditor.BufferImage->DiskImage->Size :HMainEditor.BufferImage->BufferType == FileTypeMemBuffer?HMainEditor.BufferImage->MemImage->Size :0 ); Done = TRUE; break; @@ -1158,7 +1160,9 @@ Returns: HMainEditor.BufferImage->FileImage->ReadOnly, FALSE, HMainEditor.ScreenSize.Column, - HMainEditor.ScreenSize.Row + HMainEditor.ScreenSize.Row, + HMainEditor.BufferImage->BufferType == FileTypeDiskBuffer?HMainEditor.BufferImage->DiskImage->Offset:HMainEditor.BufferImage->BufferType == FileTypeMemBuffer?HMainEditor.BufferImage->MemImage->Offset:0, + HMainEditor.BufferImage->BufferType == FileTypeDiskBuffer?HMainEditor.BufferImage->DiskImage->Size :HMainEditor.BufferImage->BufferType == FileTypeMemBuffer?HMainEditor.BufferImage->MemImage->Size :0 ); Done = TRUE; break; @@ -1409,7 +1413,9 @@ Returns: HMainEditor.BufferImage->FileImage->ReadOnly, FALSE, HMainEditor.ScreenSize.Column, - HMainEditor.ScreenSize.Row + HMainEditor.ScreenSize.Row, + HMainEditor.BufferImage->BufferType == FileTypeDiskBuffer?HMainEditor.BufferImage->DiskImage->Offset:HMainEditor.BufferImage->BufferType == FileTypeMemBuffer?HMainEditor.BufferImage->MemImage->Offset:0, + HMainEditor.BufferImage->BufferType == FileTypeDiskBuffer?HMainEditor.BufferImage->DiskImage->Size :HMainEditor.BufferImage->BufferType == FileTypeMemBuffer?HMainEditor.BufferImage->MemImage->Size :0 ); Done = TRUE; break; @@ -1827,6 +1833,25 @@ Returns: --*/ { + BOOLEAN NameChange; + BOOLEAN ReadChange; + + NameChange = FALSE; + ReadChange = FALSE; + + if ( HMainEditor.BufferImage->FileImage != NULL && + HMainEditor.BufferImage->FileImage->FileName != NULL && + HBufferImageBackupVar.FileImage != NULL && + HBufferImageBackupVar.FileImage->FileName != NULL && + StrCmp (HMainEditor.BufferImage->FileImage->FileName, HBufferImageBackupVar.FileImage->FileName) != 0 ) { + NameChange = TRUE; + } + if ( HMainEditor.BufferImage->FileImage != NULL && + HBufferImageBackupVar.FileImage != NULL && + HMainEditor.BufferImage->FileImage->ReadOnly != HBufferImageBackupVar.FileImage->ReadOnly ) { + ReadChange = TRUE; + } + // // to aVOID screen flicker // the stall value is from experience @@ -1834,28 +1859,48 @@ Returns: gBS->Stall (50); // - // call the four components refresh function + // call the components refresh function // - MainTitleBarRefresh ( - HMainEditor.BufferImage->BufferType == FileTypeFileBuffer?HMainEditor.BufferImage->FileImage->FileName:HMainEditor.BufferImage->BufferType == FileTypeDiskBuffer?HMainEditor.BufferImage->DiskImage->Name:NULL, - HMainEditor.BufferImage->BufferType, - HMainEditor.BufferImage->FileImage->ReadOnly, - HMainEditor.BufferImage->Modified, - HMainEditor.ScreenSize.Column, - HMainEditor.ScreenSize.Row - ); - HBufferImageRefresh (); - StatusBarRefresh ( - HEditorFirst, - HMainEditor.ScreenSize.Row, - HMainEditor.ScreenSize.Column, - 0, - 0, - TRUE - ); - MenuBarRefresh ( - HMainEditor.ScreenSize.Row, - HMainEditor.ScreenSize.Column); + if (HEditorFirst + || NameChange + || HMainEditor.BufferImage->BufferType != HBufferImageBackupVar.BufferType + || HBufferImageBackupVar.Modified != HMainEditor.BufferImage->Modified + || ReadChange ) { + + MainTitleBarRefresh ( + HMainEditor.BufferImage->BufferType == FileTypeFileBuffer?HMainEditor.BufferImage->FileImage->FileName:HMainEditor.BufferImage->BufferType == FileTypeDiskBuffer?HMainEditor.BufferImage->DiskImage->Name:NULL, + HMainEditor.BufferImage->BufferType, + HMainEditor.BufferImage->FileImage->ReadOnly, + HMainEditor.BufferImage->Modified, + HMainEditor.ScreenSize.Column, + HMainEditor.ScreenSize.Row, + HMainEditor.BufferImage->BufferType == FileTypeDiskBuffer?HMainEditor.BufferImage->DiskImage->Offset:HMainEditor.BufferImage->BufferType == FileTypeMemBuffer?HMainEditor.BufferImage->MemImage->Offset:0, + HMainEditor.BufferImage->BufferType == FileTypeDiskBuffer?HMainEditor.BufferImage->DiskImage->Size :HMainEditor.BufferImage->BufferType == FileTypeMemBuffer?HMainEditor.BufferImage->MemImage->Size :0 + ); + HBufferImageRefresh (); + } + if (HEditorFirst + || HBufferImageBackupVar.DisplayPosition.Row != HMainEditor.BufferImage->DisplayPosition.Row + || HBufferImageBackupVar.DisplayPosition.Column != HMainEditor.BufferImage->DisplayPosition.Column + || StatusBarGetRefresh()) { + + StatusBarRefresh ( + HEditorFirst, + HMainEditor.ScreenSize.Row, + HMainEditor.ScreenSize.Column, + 0, + 0, + TRUE + ); + HBufferImageRefresh (); + } + + if (HEditorFirst) { + MenuBarRefresh ( + HMainEditor.ScreenSize.Row, + HMainEditor.ScreenSize.Column); + HBufferImageRefresh (); + } // // EditorFirst is now set to FALSE -- cgit v1.2.3