This adds lots of pointer verification with ASSERTs only used when the condition should be impossible and never for memory allocation.
signed-off-by: jcarsey
reviewed-by: geekboy15a
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12523
6f19259b-4bc3-4df7-8a09-
765794883524
@param[in, out] BufferSize Size in bytes of Buffer.\r
@param[in] Buffer The pointer to the buffer to write.\r
\r
@param[in, out] BufferSize Size in bytes of Buffer.\r
@param[in] Buffer The pointer to the buffer to write.\r
\r
- @retval EFI_SUCCESS The data was written.\r
+ @retval EFI_OUT_OF_RESOURCES The operation failed due to lack of resources.\r
+ @retval EFI_SUCCESS The data was written.\r
**/\r
EFI_STATUS\r
EFIAPI\r
**/\r
EFI_STATUS\r
EFIAPI\r
// Ascii\r
//\r
AsciiBuffer = AllocateZeroPool(*BufferSize);\r
// Ascii\r
//\r
AsciiBuffer = AllocateZeroPool(*BufferSize);\r
+ if (AsciiBuffer == NULL) {\r
+ return (EFI_OUT_OF_RESOURCES);\r
+ }\r
AsciiSPrint(AsciiBuffer, *BufferSize, "%S", Buffer);\r
if ((UINTN)(((EFI_FILE_PROTOCOL_MEM*)This)->Position + AsciiStrSize(AsciiBuffer)) > (UINTN)(((EFI_FILE_PROTOCOL_MEM*)This)->BufferSize)) {\r
((EFI_FILE_PROTOCOL_MEM*)This)->Buffer = ReallocatePool((UINTN)(((EFI_FILE_PROTOCOL_MEM*)This)->BufferSize), (UINTN)(((EFI_FILE_PROTOCOL_MEM*)This)->BufferSize) + AsciiStrSize(AsciiBuffer) + 10, ((EFI_FILE_PROTOCOL_MEM*)This)->Buffer);\r
AsciiSPrint(AsciiBuffer, *BufferSize, "%S", Buffer);\r
if ((UINTN)(((EFI_FILE_PROTOCOL_MEM*)This)->Position + AsciiStrSize(AsciiBuffer)) > (UINTN)(((EFI_FILE_PROTOCOL_MEM*)This)->BufferSize)) {\r
((EFI_FILE_PROTOCOL_MEM*)This)->Buffer = ReallocatePool((UINTN)(((EFI_FILE_PROTOCOL_MEM*)This)->BufferSize), (UINTN)(((EFI_FILE_PROTOCOL_MEM*)This)->BufferSize) + AsciiStrSize(AsciiBuffer) + 10, ((EFI_FILE_PROTOCOL_MEM*)This)->Buffer);\r
@retval EFI_SUCCESS The help text was returned.\r
@retval EFI_OUT_OF_RESOURCES The necessary buffer could not be allocated to hold the\r
returned help text.\r
@retval EFI_SUCCESS The help text was returned.\r
@retval EFI_OUT_OF_RESOURCES The necessary buffer could not be allocated to hold the\r
returned help text.\r
- @retval EFI_INVALID_PARAMETER HelpText is NULL\r
+ @retval EFI_INVALID_PARAMETER HelpText is NULL.\r
+ @retval EFI_INVALID_PARAMETER ManFileName is invalid.\r
@retval EFI_NOT_FOUND There is no help text available for Command.\r
**/\r
EFI_STATUS\r
@retval EFI_NOT_FOUND There is no help text available for Command.\r
**/\r
EFI_STATUS\r
} else {\r
FileHandle = NULL;\r
TempString = GetManFileName(ManFileName);\r
} else {\r
FileHandle = NULL;\r
TempString = GetManFileName(ManFileName);\r
+ if (TempString == NULL) {\r
+ return (EFI_INVALID_PARAMETER);\r
+ }\r
\r
Status = SearchPathForFile(TempString, &FileHandle);\r
if (EFI_ERROR(Status)) {\r
\r
Status = SearchPathForFile(TempString, &FileHandle);\r
if (EFI_ERROR(Status)) {\r
RetVal = AllocateZeroPool(Size);\r
\r
Temp = HiiGetString(mHandleParsingHiiHandle, STRING_TOKEN(STR_TXT_OUT_DUMP_HEADER), NULL);\r
RetVal = AllocateZeroPool(Size);\r
\r
Temp = HiiGetString(mHandleParsingHiiHandle, STRING_TOKEN(STR_TXT_OUT_DUMP_HEADER), NULL);\r
- UnicodeSPrint(RetVal, Size, Temp, Dev, Dev->Mode->Attribute);\r
- FreePool(Temp);\r
+ if (Temp != NULL) {\r
+ UnicodeSPrint(RetVal, Size, Temp, Dev, Dev->Mode->Attribute);\r
+ FreePool(Temp);\r
+ }\r
\r
//\r
// Dump TextOut Info\r
\r
//\r
// Dump TextOut Info\r
UnicodeSPrint(\r
RetVal + StrLen(RetVal),\r
NewSize,\r
UnicodeSPrint(\r
RetVal + StrLen(RetVal),\r
NewSize,\r
+ Temp == NULL?L"":Temp,\r
Index == Dev->Mode->Mode ? L'*' : L' ',\r
Index,\r
!EFI_ERROR(Status)?Col:-1,\r
Index == Dev->Mode->Mode ? L'*' : L' ',\r
Index,\r
!EFI_ERROR(Status)?Col:-1,\r
UINTN DataSizeFromFile2;\r
CHAR16 *FileName1;\r
CHAR16 *FileName2;\r
UINTN DataSizeFromFile2;\r
CHAR16 *FileName1;\r
CHAR16 *FileName2;\r
+ CONST CHAR16 *TempParam;\r
\r
ErrorCount = 0;\r
ShellStatus = SHELL_SUCCESS;\r
\r
ErrorCount = 0;\r
ShellStatus = SHELL_SUCCESS;\r
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle);\r
ShellStatus = SHELL_INVALID_PARAMETER;\r
} else {\r
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle);\r
ShellStatus = SHELL_INVALID_PARAMETER;\r
} else {\r
- FileName1 = ShellFindFilePath(ShellCommandLineGetRawValue(Package, 1));\r
+ TempParam = ShellCommandLineGetRawValue(Package, 1);\r
+ ASSERT(TempParam != NULL);\r
+ FileName1 = ShellFindFilePath(TempParam);\r
if (FileName1 == NULL) {\r
if (FileName1 == NULL) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_FIND_FAIL), gShellDebug1HiiHandle, ShellCommandLineGetRawValue(Package, 1));\r
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_FIND_FAIL), gShellDebug1HiiHandle, TempParam);\r
ShellStatus = SHELL_NOT_FOUND;\r
} else {\r
Status = ShellOpenFileByName(FileName1, &FileHandle1, EFI_FILE_MODE_READ, 0);\r
if (EFI_ERROR(Status)) {\r
ShellStatus = SHELL_NOT_FOUND;\r
} else {\r
Status = ShellOpenFileByName(FileName1, &FileHandle1, EFI_FILE_MODE_READ, 0);\r
if (EFI_ERROR(Status)) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_OPEN_FAIL), gShellDebug1HiiHandle, ShellCommandLineGetRawValue(Package, 1), Status);\r
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_OPEN_FAIL), gShellDebug1HiiHandle, TempParam, Status);\r
ShellStatus = SHELL_NOT_FOUND;\r
}\r
}\r
ShellStatus = SHELL_NOT_FOUND;\r
}\r
}\r
- FileName2 = ShellFindFilePath(ShellCommandLineGetRawValue(Package, 2));\r
+ TempParam = ShellCommandLineGetRawValue(Package, 2);\r
+ ASSERT(TempParam != NULL);\r
+ FileName2 = ShellFindFilePath(TempParam);\r
if (FileName2 == NULL) {\r
if (FileName2 == NULL) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_FIND_FAIL), gShellDebug1HiiHandle, ShellCommandLineGetRawValue(Package, 2));\r
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_FIND_FAIL), gShellDebug1HiiHandle, TempParam);\r
ShellStatus = SHELL_NOT_FOUND;\r
} else {\r
Status = ShellOpenFileByName(FileName2, &FileHandle2, EFI_FILE_MODE_READ, 0);\r
if (EFI_ERROR(Status)) {\r
ShellStatus = SHELL_NOT_FOUND;\r
} else {\r
Status = ShellOpenFileByName(FileName2, &FileHandle2, EFI_FILE_MODE_READ, 0);\r
if (EFI_ERROR(Status)) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_OPEN_FAIL), gShellDebug1HiiHandle, ShellCommandLineGetRawValue(Package, 2), Status);\r
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_OPEN_FAIL), gShellDebug1HiiHandle, TempParam, Status);\r
ShellStatus = SHELL_NOT_FOUND;\r
}\r
}\r
ShellStatus = SHELL_NOT_FOUND;\r
}\r
}\r
Advance the current position (read in new data if needed).\r
Delete outdated string info. Find a match string for current position.\r
\r
Advance the current position (read in new data if needed).\r
Delete outdated string info. Find a match string for current position.\r
\r
+ @retval TRUE The operation was successful.\r
+ @retval FALSE The operation failed due to insufficient memory.\r
EFIAPI\r
GetNextMatch (\r
VOID\r
EFIAPI\r
GetNextMatch (\r
VOID\r
mPos++;\r
if (mPos == WNDSIZ * 2) {\r
Temp = AllocateZeroPool (WNDSIZ + MAXMATCH);\r
mPos++;\r
if (mPos == WNDSIZ * 2) {\r
Temp = AllocateZeroPool (WNDSIZ + MAXMATCH);\r
+ if (Temp == NULL) {\r
+ return (FALSE);\r
+ }\r
CopyMem (Temp, &mText[WNDSIZ], WNDSIZ + MAXMATCH);\r
CopyMem (&mText[0], Temp, WNDSIZ + MAXMATCH);\r
FreePool (Temp);\r
CopyMem (Temp, &mText[WNDSIZ], WNDSIZ + MAXMATCH);\r
CopyMem (&mText[0], Temp, WNDSIZ + MAXMATCH);\r
FreePool (Temp);\r
\r
DeleteNode ();\r
InsertNode ();\r
\r
DeleteNode ();\r
InsertNode ();\r
while (mRemainder > 0) {\r
LastMatchLen = mMatchLen;\r
LastMatchPos = mMatchPos;\r
while (mRemainder > 0) {\r
LastMatchLen = mMatchLen;\r
LastMatchPos = mMatchPos;\r
+ if (!GetNextMatch ()) {\r
+ Status = EFI_OUT_OF_RESOURCES;\r
+ }\r
if (mMatchLen > mRemainder) {\r
mMatchLen = mRemainder;\r
}\r
if (mMatchLen > mRemainder) {\r
mMatchLen = mRemainder;\r
}\r
(mPos - LastMatchPos - 2) & (WNDSIZ - 1));\r
LastMatchLen--;\r
while (LastMatchLen > 0) {\r
(mPos - LastMatchPos - 2) & (WNDSIZ - 1));\r
LastMatchLen--;\r
while (LastMatchLen > 0) {\r
+ if (!GetNextMatch ()) {\r
+ Status = EFI_OUT_OF_RESOURCES;\r
+ }\r
\r
HufEncodeEnd ();\r
FreeMemory ();\r
\r
HufEncodeEnd ();\r
FreeMemory ();\r
CONST CHAR16 *Cwd;\r
CHAR16 *Nfs;\r
CHAR16 *Spot;\r
CONST CHAR16 *Cwd;\r
CHAR16 *Nfs;\r
CHAR16 *Spot;\r
+ CONST CHAR16 *TempParam;\r
// SHELL_FILE_HANDLE TempHandle;\r
\r
Buffer = NULL;\r
// SHELL_FILE_HANDLE TempHandle;\r
\r
Buffer = NULL;\r
// if editor launched with file named\r
//\r
if (ShellCommandLineGetCount(Package) == 2) {\r
// if editor launched with file named\r
//\r
if (ShellCommandLineGetCount(Package) == 2) {\r
- FileBufferSetFileName (ShellCommandLineGetRawValue(Package, 1));\r
+ TempParam = ShellCommandLineGetRawValue(Package, 1);\r
+ ASSERT(TempParam != NULL);\r
+ FileBufferSetFileName (TempParam);\r
// if (EFI_ERROR(ShellFileExists(MainEditor.FileBuffer->FileName))) {\r
// Status = ShellOpenFileByName(MainEditor.FileBuffer->FileName, &TempHandle, EFI_FILE_MODE_CREATE|EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE, 0);\r
// if (!EFI_ERROR(Status)) {\r
// if (EFI_ERROR(ShellFileExists(MainEditor.FileBuffer->FileName))) {\r
// Status = ShellOpenFileByName(MainEditor.FileBuffer->FileName, &TempHandle, EFI_FILE_MODE_CREATE|EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE, 0);\r
// if (!EFI_ERROR(Status)) {\r
VOID *InBuffer;\r
CHAR16 *InFileName;\r
CONST CHAR16 *OutFileName;\r
VOID *InBuffer;\r
CHAR16 *InFileName;\r
CONST CHAR16 *OutFileName;\r
+ CONST CHAR16 *TempParam;\r
\r
InFileName = NULL;\r
OutFileName = NULL;\r
\r
InFileName = NULL;\r
OutFileName = NULL;\r
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle);\r
ShellStatus = SHELL_INVALID_PARAMETER;\r
} else {\r
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle);\r
ShellStatus = SHELL_INVALID_PARAMETER;\r
} else {\r
- InFileName = ShellFindFilePath(ShellCommandLineGetRawValue(Package, 1));\r
+ TempParam = ShellCommandLineGetRawValue(Package, 1);\r
+ ASSERT(TempParam != NULL);\r
+ InFileName = ShellFindFilePath(TempParam);\r
OutFileName = ShellCommandLineGetRawValue(Package, 2);\r
if (InFileName == NULL) {\r
OutFileName = ShellCommandLineGetRawValue(Package, 2);\r
if (InFileName == NULL) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_FIND_FAIL), gShellDebug1HiiHandle, ShellCommandLineGetRawValue(Package, 1));\r
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_FIND_FAIL), gShellDebug1HiiHandle, TempParam);\r
ShellStatus = SHELL_NOT_FOUND;\r
} else {\r
if (ShellIsDirectory(InFileName) == EFI_SUCCESS){\r
ShellStatus = SHELL_NOT_FOUND;\r
} else {\r
if (ShellIsDirectory(InFileName) == EFI_SUCCESS){\r
UINT32 ScratchSize;\r
VOID *ScratchBuffer;\r
EFI_DECOMPRESS_PROTOCOL *Decompress;\r
UINT32 ScratchSize;\r
VOID *ScratchBuffer;\r
EFI_DECOMPRESS_PROTOCOL *Decompress;\r
+ CONST CHAR16 *TempParam;\r
\r
InFileName = NULL;\r
OutFileName = NULL;\r
\r
InFileName = NULL;\r
OutFileName = NULL;\r
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle);\r
ShellStatus = SHELL_INVALID_PARAMETER;\r
} else {\r
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle);\r
ShellStatus = SHELL_INVALID_PARAMETER;\r
} else {\r
- InFileName = ShellFindFilePath(ShellCommandLineGetRawValue(Package, 1));\r
+ TempParam = ShellCommandLineGetRawValue(Package, 1);\r
+ ASSERT(TempParam != NULL);\r
+ InFileName = ShellFindFilePath(TempParam);\r
OutFileName = ShellCommandLineGetRawValue(Package, 2);\r
if (InFileName == NULL) {\r
OutFileName = ShellCommandLineGetRawValue(Package, 2);\r
if (InFileName == NULL) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_FIND_FAIL), gShellDebug1HiiHandle, ShellCommandLineGetRawValue(Package, 1));\r
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_FIND_FAIL), gShellDebug1HiiHandle, TempParam);\r
ShellStatus = SHELL_NOT_FOUND;\r
} else {\r
if (ShellIsDirectory(InFileName) == EFI_SUCCESS){\r
ShellStatus = SHELL_NOT_FOUND;\r
} else {\r
if (ShellIsDirectory(InFileName) == EFI_SUCCESS){\r
// you should set the status string\r
//\r
Status = ReadFileIntoBuffer (FileName, (VOID**)&Buffer, &HFileImage.Size, &HFileImage.ReadOnly);\r
// you should set the status string\r
//\r
Status = ReadFileIntoBuffer (FileName, (VOID**)&Buffer, &HFileImage.Size, &HFileImage.ReadOnly);\r
- if (EFI_ERROR(Status)) {\r
+ if (EFI_ERROR(Status) || Buffer == NULL) {\r
UnicodeBuffer = CatSPrint(NULL, L"Read error on file &s: %r", FileName, Status);\r
if (UnicodeBuffer == NULL) {\r
SHELL_FREE_NON_NULL(Buffer);\r
UnicodeBuffer = CatSPrint(NULL, L"Read error on file &s: %r", FileName, Status);\r
if (UnicodeBuffer == NULL) {\r
SHELL_FREE_NON_NULL(Buffer);\r