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
This commit is contained in:
jcarsey 2011-03-29 19:31:18 +00:00
parent 64d753f12d
commit 980d554e3a
12 changed files with 157 additions and 78 deletions

View File

@ -3134,7 +3134,7 @@ FileBufferReplace (
FileBuffer.FileModified = TRUE; FileBuffer.FileModified = TRUE;
MainTitleBarRefresh (MainEditor.FileBuffer->FileName, MainEditor.FileBuffer->FileType, MainEditor.FileBuffer->ReadOnly, MainEditor.FileBuffer->FileModified, MainEditor.ScreenSize.Column, MainEditor.ScreenSize.Row); MainTitleBarRefresh (MainEditor.FileBuffer->FileName, MainEditor.FileBuffer->FileType, MainEditor.FileBuffer->ReadOnly, MainEditor.FileBuffer->FileModified, MainEditor.ScreenSize.Column, MainEditor.ScreenSize.Row, 0, 0);
FileBufferRestorePosition (); FileBufferRestorePosition ();
FileBufferRefresh (); FileBufferRefresh ();

View File

@ -271,7 +271,7 @@ MainCommandOpenFile (
return Status; return Status;
} }
MainTitleBarRefresh (MainEditor.FileBuffer->FileName, MainEditor.FileBuffer->FileType, MainEditor.FileBuffer->ReadOnly, MainEditor.FileBuffer->FileModified, MainEditor.ScreenSize.Column, MainEditor.ScreenSize.Row); MainTitleBarRefresh (MainEditor.FileBuffer->FileName, MainEditor.FileBuffer->FileType, MainEditor.FileBuffer->ReadOnly, MainEditor.FileBuffer->FileModified, MainEditor.ScreenSize.Column, MainEditor.ScreenSize.Row, 0, 0);
FileBufferRestorePosition (); FileBufferRestorePosition ();
Done = TRUE; Done = TRUE;
break; break;
@ -1510,7 +1510,7 @@ MainEditorRefresh (
|| FileBufferBackupVar.FileModified != FileBuffer.FileModified || FileBufferBackupVar.FileModified != FileBuffer.FileModified
|| FileBufferBackupVar.ReadOnly != FileBuffer.ReadOnly) { || FileBufferBackupVar.ReadOnly != FileBuffer.ReadOnly) {
MainTitleBarRefresh (MainEditor.FileBuffer->FileName, MainEditor.FileBuffer->FileType, MainEditor.FileBuffer->ReadOnly, MainEditor.FileBuffer->FileModified, MainEditor.ScreenSize.Column, MainEditor.ScreenSize.Row); MainTitleBarRefresh (MainEditor.FileBuffer->FileName, MainEditor.FileBuffer->FileType, MainEditor.FileBuffer->ReadOnly, MainEditor.FileBuffer->FileModified, MainEditor.ScreenSize.Column, MainEditor.ScreenSize.Row, 0, 0);
FileBufferRestorePosition (); FileBufferRestorePosition ();
FileBufferRefresh (); FileBufferRefresh ();
} }

View File

@ -79,6 +79,8 @@ typedef union {
@param[in] Modified TRUE if the file was modified. FALSE otherwise. @param[in] Modified TRUE if the file was modified. FALSE otherwise.
@param[in] LastCol The last printable column. @param[in] LastCol The last printable column.
@param[in] LastRow The last printable row. @param[in] LastRow The last printable row.
@param[in] Offset The offset into the file. (only for mem/disk)
@param[in] Size The file's size. (only for mem/disk)
@retval EFI_SUCCESS The operation was successful. @retval EFI_SUCCESS The operation was successful.
**/ **/
@ -87,10 +89,12 @@ EFIAPI
MainTitleBarRefresh ( MainTitleBarRefresh (
IN CONST CHAR16 *FileName OPTIONAL, IN CONST CHAR16 *FileName OPTIONAL,
IN CONST EDIT_FILE_TYPE FileType, IN CONST EDIT_FILE_TYPE FileType,
IN BOOLEAN ReadOnly, IN CONST BOOLEAN ReadOnly,
IN BOOLEAN Modified, IN CONST BOOLEAN Modified,
IN UINTN LastCol, IN CONST UINTN LastCol,
IN UINTN LastRow IN CONST UINTN LastRow,
IN CONST UINTN Offset,
IN CONST UINTN Size
) )
{ {
TITLE_BAR_COLOR_UNION Orig; TITLE_BAR_COLOR_UNION Orig;

View File

@ -56,6 +56,8 @@ typedef enum {
@param[in] Modified TRUE if the file was modified. FALSE otherwise. @param[in] Modified TRUE if the file was modified. FALSE otherwise.
@param[in] LastCol The last printable column. @param[in] LastCol The last printable column.
@param[in] LastRow The last printable row. @param[in] LastRow The last printable row.
@param[in] Offset The offset into the file. (only for mem/disk)
@param[in] Size The file's size. (only for mem/disk)
@retval EFI_SUCCESS The operation was successful. @retval EFI_SUCCESS The operation was successful.
**/ **/
@ -64,10 +66,12 @@ EFIAPI
MainTitleBarRefresh ( MainTitleBarRefresh (
IN CONST CHAR16 *FileName OPTIONAL, IN CONST CHAR16 *FileName OPTIONAL,
IN CONST EDIT_FILE_TYPE FileType, IN CONST EDIT_FILE_TYPE FileType,
IN BOOLEAN ReadOnly, IN CONST BOOLEAN ReadOnly,
IN BOOLEAN Modified, IN CONST BOOLEAN Modified,
IN UINTN LastCol, IN CONST UINTN LastCol,
IN UINTN LastRow IN CONST UINTN LastRow,
IN CONST UINTN Offset,
IN CONST UINTN Size
); );
#endif #endif

View File

@ -954,6 +954,7 @@ HBufferImageRead (
// variable initialization // variable initialization
// //
Status = EFI_SUCCESS; Status = EFI_SUCCESS;
HBufferImage.BufferType = BufferType;
// //
// three types of buffer supported // three types of buffer supported

View File

@ -219,6 +219,7 @@ Returns:
{ {
CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath; CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath;
EFI_DEVICE_PATH_PROTOCOL *DupDevicePath; EFI_DEVICE_PATH_PROTOCOL *DupDevicePath;
EFI_DEVICE_PATH_PROTOCOL *DupDevicePathForFree;
EFI_HANDLE Handle; EFI_HANDLE Handle;
EFI_BLOCK_IO_PROTOCOL *BlkIo; EFI_BLOCK_IO_PROTOCOL *BlkIo;
EFI_STATUS Status; EFI_STATUS Status;
@ -241,11 +242,12 @@ Returns:
return EFI_INVALID_PARAMETER; return EFI_INVALID_PARAMETER;
} }
DupDevicePath = DuplicateDevicePath(DevicePath); DupDevicePath = DuplicateDevicePath(DevicePath);
DupDevicePathForFree = DupDevicePath;
// //
// get blkio interface // get blkio interface
// //
Status = gBS->LocateDevicePath(&gEfiBlockIoProtocolGuid,&DupDevicePath,&Handle); Status = gBS->LocateDevicePath(&gEfiBlockIoProtocolGuid,&DupDevicePath,&Handle);
FreePool(DupDevicePath); FreePool(DupDevicePathForFree);
if (EFI_ERROR (Status)) { if (EFI_ERROR (Status)) {
StatusBarSetStatusString (L"Read Disk Failed"); StatusBarSetStatusString (L"Read Disk Failed");
return Status; return Status;

View File

@ -301,6 +301,7 @@ Returns:
HBufferImage.HighBits = TRUE; HBufferImage.HighBits = TRUE;
HBufferImage.BufferPosition.Row = 1; HBufferImage.BufferPosition.Row = 1;
HBufferImage.BufferPosition.Column = 1; HBufferImage.BufferPosition.Column = 1;
HBufferImage.BufferType = FileTypeFileBuffer;
if (!Recover) { if (!Recover) {
UnicodeBuffer = CatSPrint(NULL, L"%d Lines Read", HBufferImage.NumLines); UnicodeBuffer = CatSPrint(NULL, L"%d Lines Read", HBufferImage.NumLines);

View File

@ -44,7 +44,7 @@ ShellCommandRunHexEdit (
SHELL_STATUS ShellStatus; SHELL_STATUS ShellStatus;
LIST_ENTRY *Package; LIST_ENTRY *Package;
CONST CHAR16 *Cwd; CONST CHAR16 *Cwd;
CHAR16 *NFS; CHAR16 *NewName;
CHAR16 *Spot; CHAR16 *Spot;
CONST CHAR16 *Name; CONST CHAR16 *Name;
UINTN Offset; UINTN Offset;
@ -54,7 +54,7 @@ ShellCommandRunHexEdit (
Buffer = NULL; Buffer = NULL;
ShellStatus = SHELL_SUCCESS; ShellStatus = SHELL_SUCCESS;
NFS = NULL; NewName = NULL;
Cwd = NULL; Cwd = NULL;
Buffer = NULL; Buffer = NULL;
Name = NULL; Name = NULL;
@ -90,10 +90,7 @@ ShellCommandRunHexEdit (
// Check for -d // Check for -d
// //
if (ShellCommandLineGetFlag(Package, L"-d")){ if (ShellCommandLineGetFlag(Package, L"-d")){
if (ShellCommandLineGetCount(Package) < 4) { if (ShellCommandLineGetCount(Package) > 4) {
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle);
ShellStatus = SHELL_INVALID_PARAMETER;
} else if (ShellCommandLineGetCount(Package) > 4) {
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle); ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle);
ShellStatus = SHELL_INVALID_PARAMETER; ShellStatus = SHELL_INVALID_PARAMETER;
} else { } else {
@ -138,7 +135,24 @@ ShellCommandRunHexEdit (
Size = ShellStrToUintn(ShellCommandLineGetRawValue(Package, 2)); 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) { if (ShellStatus == SHELL_SUCCESS && WhatToDo == FileTypeNone) {
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle); 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 (Buffer);
SHELL_FREE_NON_NULL (NewName);
return ShellStatus; return ShellStatus;
} }

View File

@ -933,7 +933,9 @@ Returns:
HMainEditor.BufferImage->FileImage->ReadOnly, HMainEditor.BufferImage->FileImage->ReadOnly,
FALSE, FALSE,
HMainEditor.ScreenSize.Column, 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; Done = TRUE;
break; break;
@ -1158,7 +1160,9 @@ Returns:
HMainEditor.BufferImage->FileImage->ReadOnly, HMainEditor.BufferImage->FileImage->ReadOnly,
FALSE, FALSE,
HMainEditor.ScreenSize.Column, 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; Done = TRUE;
break; break;
@ -1409,7 +1413,9 @@ Returns:
HMainEditor.BufferImage->FileImage->ReadOnly, HMainEditor.BufferImage->FileImage->ReadOnly,
FALSE, FALSE,
HMainEditor.ScreenSize.Column, 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; Done = TRUE;
break; 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 // to aVOID screen flicker
// the stall value is from experience // the stall value is from experience
@ -1834,28 +1859,48 @@ Returns:
gBS->Stall (50); gBS->Stall (50);
// //
// call the four components refresh function // call the components refresh function
// //
MainTitleBarRefresh ( if (HEditorFirst
HMainEditor.BufferImage->BufferType == FileTypeFileBuffer?HMainEditor.BufferImage->FileImage->FileName:HMainEditor.BufferImage->BufferType == FileTypeDiskBuffer?HMainEditor.BufferImage->DiskImage->Name:NULL, || NameChange
HMainEditor.BufferImage->BufferType, || HMainEditor.BufferImage->BufferType != HBufferImageBackupVar.BufferType
HMainEditor.BufferImage->FileImage->ReadOnly, || HBufferImageBackupVar.Modified != HMainEditor.BufferImage->Modified
HMainEditor.BufferImage->Modified, || ReadChange ) {
HMainEditor.ScreenSize.Column,
HMainEditor.ScreenSize.Row MainTitleBarRefresh (
); HMainEditor.BufferImage->BufferType == FileTypeFileBuffer?HMainEditor.BufferImage->FileImage->FileName:HMainEditor.BufferImage->BufferType == FileTypeDiskBuffer?HMainEditor.BufferImage->DiskImage->Name:NULL,
HBufferImageRefresh (); HMainEditor.BufferImage->BufferType,
StatusBarRefresh ( HMainEditor.BufferImage->FileImage->ReadOnly,
HEditorFirst, HMainEditor.BufferImage->Modified,
HMainEditor.ScreenSize.Row, HMainEditor.ScreenSize.Column,
HMainEditor.ScreenSize.Column, HMainEditor.ScreenSize.Row,
0, HMainEditor.BufferImage->BufferType == FileTypeDiskBuffer?HMainEditor.BufferImage->DiskImage->Offset:HMainEditor.BufferImage->BufferType == FileTypeMemBuffer?HMainEditor.BufferImage->MemImage->Offset:0,
0, HMainEditor.BufferImage->BufferType == FileTypeDiskBuffer?HMainEditor.BufferImage->DiskImage->Size :HMainEditor.BufferImage->BufferType == FileTypeMemBuffer?HMainEditor.BufferImage->MemImage->Size :0
TRUE );
); HBufferImageRefresh ();
MenuBarRefresh ( }
HMainEditor.ScreenSize.Row, if (HEditorFirst
HMainEditor.ScreenSize.Column); || 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 // EditorFirst is now set to FALSE

View File

@ -65,6 +65,12 @@ ShellCommandRunSmbiosView (
if (ShellCommandLineGetCount(Package) > 1) { if (ShellCommandLineGetCount(Package) > 1) {
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle); ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle);
ShellStatus = SHELL_INVALID_PARAMETER; ShellStatus = SHELL_INVALID_PARAMETER;
} else if (ShellCommandLineGetFlag(Package, L"-t") && ShellCommandLineGetValue(Package, L"-t") == NULL) {
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellDebug1HiiHandle, L"-t");
ShellStatus = SHELL_INVALID_PARAMETER;
} else if (ShellCommandLineGetFlag(Package, L"-h") && ShellCommandLineGetValue(Package, L"-h") == NULL) {
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellDebug1HiiHandle, L"-h");
ShellStatus = SHELL_INVALID_PARAMETER;
} else if ( } else if (
(ShellCommandLineGetFlag(Package, L"-t") && ShellCommandLineGetFlag(Package, L"-h")) || (ShellCommandLineGetFlag(Package, L"-t") && ShellCommandLineGetFlag(Package, L"-h")) ||
(ShellCommandLineGetFlag(Package, L"-t") && ShellCommandLineGetFlag(Package, L"-s")) || (ShellCommandLineGetFlag(Package, L"-t") && ShellCommandLineGetFlag(Package, L"-s")) ||

View File

@ -41,13 +41,13 @@
Pci.h Pci.h
DmpStore.c DmpStore.c
Dblk.c Dblk.c
./SmbiosView/EventLogInfo.c SmbiosView/EventLogInfo.c
./SmbiosView/PrintInfo.c SmbiosView/PrintInfo.c
./SmbiosView/QueryTable.c SmbiosView/QueryTable.c
./SmbiosView/SmbiosView.c SmbiosView/SmbiosView.c
./SmbiosView/Smbios.c SmbiosView/Smbios.c
./SmbiosView/SmbiosViewStrings.uni SmbiosView/SmbiosViewStrings.uni
./SmbiosView/LibSmbiosView.c SmbiosView/LibSmbiosView.c
UefiShellDebug1CommandsLib.c UefiShellDebug1CommandsLib.c
UefiShellDebug1CommandsLib.h UefiShellDebug1CommandsLib.h
UefiShellDebug1CommandsLib.uni UefiShellDebug1CommandsLib.uni
@ -63,36 +63,36 @@
EditMenuBar.c EditMenuBar.c
## Files specific to the text editor ## Files specific to the text editor
./Edit/Edit.c Edit/Edit.c
./Edit/TextEditor.h Edit/TextEditor.h
./Edit/TextEditorTypes.h Edit/TextEditorTypes.h
./Edit/FileBuffer.h Edit/FileBuffer.h
./Edit/FileBuffer.c Edit/FileBuffer.c
./Edit/MainTextEditor.h Edit/MainTextEditor.h
./Edit/MainTextEditor.c Edit/MainTextEditor.c
./Edit/Misc.h Edit/Misc.h
./Edit/Misc.c Edit/Misc.c
./Edit/TextEditStrings.uni Edit/TextEditStrings.uni
## Files specific to the HEX editor ## Files specific to the HEX editor
./HexEdit/BufferImage.h HexEdit/BufferImage.h
./HexEdit/BufferImage.c HexEdit/BufferImage.c
./HexEdit/Clipboard.h HexEdit/Clipboard.h
./HexEdit/Clipboard.c HexEdit/Clipboard.c
./HexEdit/DiskImage.h HexEdit/DiskImage.h
./HexEdit/DiskImage.c HexEdit/DiskImage.c
./HexEdit/FileImage.h HexEdit/FileImage.h
./HexEdit/FileImage.c HexEdit/FileImage.c
./HexEdit/HexEdit.c HexEdit/HexEdit.c
./HexEdit/HexEditor.h HexEdit/HexEditor.h
./HexEdit/HexEditorTypes.h HexEdit/HexEditorTypes.h
./HexEdit/HexeditStrings.uni HexEdit/HexeditStrings.uni
./HexEdit/MainHexEditor.h HexEdit/MainHexEditor.h
./HexEdit/MainHexEditor.c HexEdit/MainHexEditor.c
./HexEdit/MemImage.h HexEdit/MemImage.h
./HexEdit/MemImage.c HexEdit/MemImage.c
./HexEdit/Misc.h HexEdit/Misc.h
./HexEdit/Misc.c HexEdit/Misc.c
[Packages] [Packages]
MdePkg/MdePkg.dec MdePkg/MdePkg.dec