//\r
// allocate new space to copy strings and structure\r
//\r
- NewInfo->FullName = AllocateZeroPool(StrSize(OldInfo->FullName));\r
- NewInfo->FileName = AllocateZeroPool(StrSize(OldInfo->FileName));\r
- NewInfo->Info = AllocateZeroPool((UINTN)OldInfo->Info->Size);\r
+ NewInfo->FullName = AllocateCopyPool(StrSize(OldInfo->FullName), OldInfo->FullName);\r
+ NewInfo->FileName = AllocateCopyPool(StrSize(OldInfo->FileName), OldInfo->FileName);\r
+ NewInfo->Info = AllocateCopyPool((UINTN)OldInfo->Info->Size, OldInfo->Info);\r
\r
//\r
// make sure all the memory allocations were sucessful\r
//\r
if (NULL == NewInfo->FullName || NewInfo->FileName == NULL || NewInfo->Info == NULL) {\r
+ //\r
+ // Free the partially allocated new node\r
+ //\r
+ SHELL_FREE_NON_NULL(NewInfo->FullName);\r
+ SHELL_FREE_NON_NULL(NewInfo->FileName);\r
+ SHELL_FREE_NON_NULL(NewInfo->Info);\r
+ SHELL_FREE_NON_NULL(NewInfo);\r
+\r
+ //\r
+ // Free the previously converted stuff\r
+ //\r
ShellCloseFileMetaArg((EFI_SHELL_FILE_INFO**)(&ListHead));\r
ListHead = NULL;\r
break;\r
}\r
\r
- //\r
- // Copt the strings and structure\r
- //\r
- StrCpy(NewInfo->FullName, OldInfo->FullName);\r
- StrCpy(NewInfo->FileName, OldInfo->FileName);\r
- gBS->CopyMem (NewInfo->Info, OldInfo->Info, (UINTN)OldInfo->Info->Size);\r
-\r
//\r
// add that to the list\r
//\r
if (TestPath == NULL) {\r
return (NULL);\r
}\r
- StrCpy(TestPath, Path);\r
- StrCat(TestPath, FileName);\r
+ StrnCpy(TestPath, Path, Size/sizeof(CHAR16) - 1);\r
+ StrnCat(TestPath, FileName, Size/sizeof(CHAR16) - 1 - StrLen(TestPath));\r
Status = ShellOpenFileByName(TestPath, &Handle, EFI_FILE_MODE_READ, 0);\r
if (!EFI_ERROR(Status)){\r
if (FileHandleIsDirectory(Handle) != EFI_SUCCESS) {\r
*TempChar = CHAR_NULL;\r
}\r
if (TestPath[StrLen(TestPath)-1] != L'\\') {\r
- StrCat(TestPath, L"\\");\r
+ StrnCat(TestPath, L"\\", Size/sizeof(CHAR16) - 1 - StrLen(TestPath));\r
}\r
if (FileName[0] == L'\\') {\r
FileName++;\r
}\r
- StrCat(TestPath, FileName);\r
+ StrnCat(TestPath, FileName, Size/sizeof(CHAR16) - 1 - StrLen(TestPath));\r
if (StrStr(Walker, L";") != NULL) {\r
Walker = StrStr(Walker, L";") + 1;\r
} else {\r
return (NULL);\r
}\r
for (ExtensionWalker = FileExtension, TempChar2 = (CHAR16*)FileExtension; TempChar2 != NULL ; ExtensionWalker = TempChar2 + 1){\r
- StrCpy(TestPath, FileName);\r
+ StrnCpy(TestPath, FileName, Size/sizeof(CHAR16) - 1);\r
if (ExtensionWalker != NULL) {\r
- StrCat(TestPath, ExtensionWalker);\r
+ StrnCat(TestPath, ExtensionWalker, Size/sizeof(CHAR16) - 1 - StrLen(TestPath));\r
}\r
TempChar = StrStr(TestPath, L";");\r
if (TempChar != NULL) {\r
UINTN ValueSize;\r
UINTN Count;\r
CONST CHAR16 *TempPointer;\r
+ UINTN CurrentValueSize;\r
\r
CurrentItemPackage = NULL;\r
GetItemValue = 0;\r
*CheckPackage = NULL;\r
return (EFI_OUT_OF_RESOURCES);\r
}\r
- CurrentItemPackage->Name = AllocateZeroPool(StrSize(Argv[LoopCounter]));\r
+ CurrentItemPackage->Name = AllocateCopyPool(StrSize(Argv[LoopCounter]), Argv[LoopCounter]);\r
if (CurrentItemPackage->Name == NULL) {\r
ShellCommandLineFreeVarList(*CheckPackage);\r
*CheckPackage = NULL;\r
return (EFI_OUT_OF_RESOURCES);\r
}\r
- StrCpy(CurrentItemPackage->Name, Argv[LoopCounter]);\r
CurrentItemPackage->Type = CurrentItemType;\r
CurrentItemPackage->OriginalPosition = (UINTN)(-1);\r
CurrentItemPackage->Value = NULL;\r
// get the item VALUE for a previous flag\r
//\r
if (StrStr(Argv[LoopCounter], L" ") == NULL) {\r
- CurrentItemPackage->Value = ReallocatePool(ValueSize, ValueSize + StrSize(Argv[LoopCounter]) + sizeof(CHAR16), CurrentItemPackage->Value);\r
+ CurrentValueSize = ValueSize + StrSize(Argv[LoopCounter]) + sizeof(CHAR16);\r
+ CurrentItemPackage->Value = ReallocatePool(ValueSize, CurrentValueSize, CurrentItemPackage->Value);\r
ASSERT(CurrentItemPackage->Value != NULL);\r
if (ValueSize == 0) {\r
- StrCpy(CurrentItemPackage->Value, Argv[LoopCounter]);\r
+ StrnCpy(CurrentItemPackage->Value, Argv[LoopCounter], CurrentValueSize/sizeof(CHAR16) - 1);\r
} else {\r
- StrCat(CurrentItemPackage->Value, L" ");\r
- StrCat(CurrentItemPackage->Value, Argv[LoopCounter]);\r
+ StrnCat(CurrentItemPackage->Value, L" ", CurrentValueSize/sizeof(CHAR16) - 1 - StrLen(CurrentItemPackage->Value));\r
+ StrnCat(CurrentItemPackage->Value, Argv[LoopCounter], CurrentValueSize/sizeof(CHAR16) - 1 - StrLen(CurrentItemPackage->Value));\r
}\r
ValueSize += StrSize(Argv[LoopCounter]) + sizeof(CHAR16);\r
} else {\r
//\r
// the parameter has spaces. must be quoted.\r
//\r
- CurrentItemPackage->Value = ReallocatePool(ValueSize, ValueSize + StrSize(Argv[LoopCounter]) + sizeof(CHAR16) + sizeof(CHAR16) + sizeof(CHAR16), CurrentItemPackage->Value);\r
+ CurrentValueSize = ValueSize + StrSize(Argv[LoopCounter]) + sizeof(CHAR16) + sizeof(CHAR16) + sizeof(CHAR16);\r
+ CurrentItemPackage->Value = ReallocatePool(ValueSize, CurrentValueSize, CurrentItemPackage->Value);\r
ASSERT(CurrentItemPackage->Value != NULL);\r
if (ValueSize == 0) {\r
- StrCpy(CurrentItemPackage->Value, L"\"");\r
- StrCat(CurrentItemPackage->Value, Argv[LoopCounter]);\r
- StrCat(CurrentItemPackage->Value, L"\"");\r
+ StrnCpy(CurrentItemPackage->Value, L"\"", CurrentValueSize/sizeof(CHAR16) - 1);\r
+ StrnCat(CurrentItemPackage->Value, Argv[LoopCounter], CurrentValueSize/sizeof(CHAR16) - 1 - StrLen(CurrentItemPackage->Value));\r
+ StrnCat(CurrentItemPackage->Value, L"\"", CurrentValueSize/sizeof(CHAR16) - 1 - StrLen(CurrentItemPackage->Value));\r
} else {\r
- StrCat(CurrentItemPackage->Value, L" ");\r
- StrCat(CurrentItemPackage->Value, L"\"");\r
- StrCat(CurrentItemPackage->Value, Argv[LoopCounter]);\r
- StrCat(CurrentItemPackage->Value, L"\"");\r
+ StrnCat(CurrentItemPackage->Value, L" ", CurrentValueSize/sizeof(CHAR16) - 1 - StrLen(CurrentItemPackage->Value));\r
+ StrnCat(CurrentItemPackage->Value, L"\"", CurrentValueSize/sizeof(CHAR16) - 1 - StrLen(CurrentItemPackage->Value));\r
+ StrnCat(CurrentItemPackage->Value, Argv[LoopCounter], CurrentValueSize/sizeof(CHAR16) - 1 - StrLen(CurrentItemPackage->Value));\r
+ StrnCat(CurrentItemPackage->Value, L"\"", CurrentValueSize/sizeof(CHAR16) - 1 - StrLen(CurrentItemPackage->Value));\r
}\r
ValueSize += StrSize(Argv[LoopCounter]) + sizeof(CHAR16);\r
}\r
}\r
CurrentItemPackage->Name = NULL;\r
CurrentItemPackage->Type = TypePosition;\r
- CurrentItemPackage->Value = AllocateZeroPool(StrSize(TempPointer));\r
+ CurrentItemPackage->Value = AllocateCopyPool(StrSize(TempPointer), TempPointer);\r
if (CurrentItemPackage->Value == NULL) {\r
ShellCommandLineFreeVarList(*CheckPackage);\r
*CheckPackage = NULL;\r
return (EFI_OUT_OF_RESOURCES);\r
}\r
- StrCpy(CurrentItemPackage->Value, TempPointer);\r
CurrentItemPackage->OriginalPosition = Count++;\r
InsertHeadList(*CheckPackage, &CurrentItemPackage->Link);\r
} else {\r
// this was a non-recognised flag... error!\r
//\r
if (ProblemParam != NULL) {\r
- *ProblemParam = AllocateZeroPool(StrSize(Argv[LoopCounter]));\r
- if (*ProblemParam != NULL) {\r
- StrCpy(*ProblemParam, Argv[LoopCounter]);\r
- }\r
+ *ProblemParam = AllocateCopyPool(StrSize(Argv[LoopCounter]), Argv[LoopCounter]);\r
}\r
ShellCommandLineFreeVarList(*CheckPackage);\r
*CheckPackage = NULL;\r
if (Replace == NULL) {\r
return (EFI_OUT_OF_RESOURCES);\r
}\r
- NewString = SetMem16(NewString, NewSize, CHAR_NULL);\r
+ NewString = ZeroMem(NewString, NewSize);\r
while (*SourceString != CHAR_NULL) {\r
//\r
// if we find the FindTarget and either Skip == FALSE or Skip and we\r
FreePool(Replace);\r
return (EFI_BUFFER_TOO_SMALL);\r
}\r
- StrCat(NewString, Replace);\r
+ StrnCat(NewString, Replace, NewSize/sizeof(CHAR16) - 1 - StrLen(NewString));\r
} else {\r
Size = StrSize(NewString);\r
if (Size + sizeof(CHAR16) > NewSize) {\r