From cbdd109b43c8386d74a7bb40d892e5c2485f71f9 Mon Sep 17 00:00:00 2001 From: jcarsey Date: Mon, 4 Apr 2011 21:41:24 +0000 Subject: check memory allocations for success. check pointer before access. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11503 6f19259b-4bc3-4df7-8a09-765794883524 --- .../UefiShellDebug1CommandsLib/Edit/FileBuffer.c | 2 +- .../Library/UefiShellDebug1CommandsLib/SetVar.c | 21 +++++--- ShellPkg/Library/UefiShellLevel1CommandsLib/For.c | 4 +- .../UefiShellLevel2CommandsLib.uni | Bin 111056 -> 111268 bytes ShellPkg/Library/UefiShellLevel2CommandsLib/Vol.c | 54 ++++++++++++--------- 5 files changed, 48 insertions(+), 33 deletions(-) (limited to 'ShellPkg/Library') diff --git a/ShellPkg/Library/UefiShellDebug1CommandsLib/Edit/FileBuffer.c b/ShellPkg/Library/UefiShellDebug1CommandsLib/Edit/FileBuffer.c index 8223847924..8f7c870bb1 100644 --- a/ShellPkg/Library/UefiShellDebug1CommandsLib/Edit/FileBuffer.c +++ b/ShellPkg/Library/UefiShellDebug1CommandsLib/Edit/FileBuffer.c @@ -2760,7 +2760,7 @@ FileBufferMovePosition ( // FileBuffer.FilePosition.Column = NewFilePosCol; if (ColGap < 0) { - Abs = -ColGap; + Abs = (UINTN)(-ColGap); FileBuffer.DisplayPosition.Column -= Abs; } else { FileBuffer.DisplayPosition.Column += ColGap; diff --git a/ShellPkg/Library/UefiShellDebug1CommandsLib/SetVar.c b/ShellPkg/Library/UefiShellDebug1CommandsLib/SetVar.c index afccf7bd58..34eb6af8ac 100644 --- a/ShellPkg/Library/UefiShellDebug1CommandsLib/SetVar.c +++ b/ShellPkg/Library/UefiShellDebug1CommandsLib/SetVar.c @@ -205,15 +205,20 @@ ShellCommandRunSetVar ( Data++; Data++; Buffer = AllocateZeroPool(StrSize(Data)); - UnicodeSPrint(Buffer, StrSize(Data), L"%s", Data); - ((CHAR16*)Buffer)[StrLen(Buffer)-1] = CHAR_NULL; - - Status = gRT->SetVariable((CHAR16*)VariableName, &Guid, Attributes, StrSize(Buffer)-sizeof(CHAR16), Buffer); - if (EFI_ERROR(Status)) { - ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_SETVAR_ERROR_SET), gShellDebug1HiiHandle, &Guid, VariableName, Status); - ShellStatus = SHELL_ACCESS_DENIED; + if (Buffer == NULL) { + ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_OUT_MEM), gShellDebug1HiiHandle); + ShellStatus = SHELL_OUT_OF_RESOURCES; } else { - ASSERT(ShellStatus == SHELL_SUCCESS); + UnicodeSPrint(Buffer, StrSize(Data), L"%s", Data); + ((CHAR16*)Buffer)[StrLen(Buffer)-1] = CHAR_NULL; + + Status = gRT->SetVariable((CHAR16*)VariableName, &Guid, Attributes, StrSize(Buffer)-sizeof(CHAR16), Buffer); + if (EFI_ERROR(Status)) { + ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_SETVAR_ERROR_SET), gShellDebug1HiiHandle, &Guid, VariableName, Status); + ShellStatus = SHELL_ACCESS_DENIED; + } else { + ASSERT(ShellStatus == SHELL_SUCCESS); + } } } else if (StrnCmp(Data, L"--", 2) == 0) { // diff --git a/ShellPkg/Library/UefiShellLevel1CommandsLib/For.c b/ShellPkg/Library/UefiShellLevel1CommandsLib/For.c index 64110099d3..b8e4805d92 100644 --- a/ShellPkg/Library/UefiShellLevel1CommandsLib/For.c +++ b/ShellPkg/Library/UefiShellLevel1CommandsLib/For.c @@ -565,7 +565,9 @@ ShellCommandRunFor ( Info->RemoveSubstAlias = TRUE; } } - CurrentScriptFile->CurrentCommand->Data = Info; + if (CurrentScriptFile->CurrentCommand != NULL) { + CurrentScriptFile->CurrentCommand->Data = Info; + } } else { ShellPrintHiiEx( -1, diff --git a/ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2CommandsLib.uni b/ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2CommandsLib.uni index f9c11811da..428d8ddaec 100644 Binary files a/ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2CommandsLib.uni and b/ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2CommandsLib.uni differ diff --git a/ShellPkg/Library/UefiShellLevel2CommandsLib/Vol.c b/ShellPkg/Library/UefiShellLevel2CommandsLib/Vol.c index 51cf33f1ba..9300d5ec35 100644 --- a/ShellPkg/Library/UefiShellLevel2CommandsLib/Vol.c +++ b/ShellPkg/Library/UefiShellLevel2CommandsLib/Vol.c @@ -113,14 +113,20 @@ HandleVol( Size2 = StrSize(SysInfo->VolumeLabel); if (Size1 > Size2) { SysInfo = ReallocatePool((UINTN)SysInfo->Size, (UINTN)SysInfo->Size + Size1 - Size2, SysInfo); + if (SysInfo == NULL) { + ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_OUT_MEM), gShellLevel2HiiHandle); + ShellStatus = SHELL_OUT_OF_RESOURCES; + } + } + if (SysInfo != NULL) { + StrCpy ((CHAR16 *) SysInfo->VolumeLabel, Name); + SysInfo->Size = SIZE_OF_EFI_FILE_SYSTEM_INFO + Size1; + Status = EfiFpHandle->SetInfo( + EfiFpHandle, + &gEfiFileSystemInfoGuid, + (UINTN)SysInfo->Size, + SysInfo); } - StrCpy ((CHAR16 *) SysInfo->VolumeLabel, Name); - SysInfo->Size = SIZE_OF_EFI_FILE_SYSTEM_INFO + Size1; - Status = EfiFpHandle->SetInfo( - EfiFpHandle, - &gEfiFileSystemInfoGuid, - (UINTN)SysInfo->Size, - SysInfo); } FreePool(SysInfo); @@ -154,22 +160,24 @@ HandleVol( ASSERT(SysInfo != NULL); - // - // print VolumeInfo table - // - ShellPrintHiiEx ( - 0, - gST->ConOut->Mode->CursorRow, - NULL, - STRING_TOKEN (STR_VOL_VOLINFO), - gShellLevel2HiiHandle, - SysInfo->VolumeLabel, - SysInfo->ReadOnly?L"r":L"rw", - SysInfo->VolumeSize, - SysInfo->FreeSpace, - SysInfo->BlockSize - ); - SHELL_FREE_NON_NULL(SysInfo); + if (SysInfo != NULL) { + // + // print VolumeInfo table + // + ShellPrintHiiEx ( + 0, + gST->ConOut->Mode->CursorRow, + NULL, + STRING_TOKEN (STR_VOL_VOLINFO), + gShellLevel2HiiHandle, + SysInfo->VolumeLabel, + SysInfo->ReadOnly?L"r":L"rw", + SysInfo->VolumeSize, + SysInfo->FreeSpace, + SysInfo->BlockSize + ); + SHELL_FREE_NON_NULL(SysInfo); + } return (ShellStatus); } -- cgit v1.2.3