if (PrivateFile->FileName == NULL) {\r
goto Done;\r
}\r
- AsciiStrCpy (PrivateFile->FileName, Private->FilePath);\r
+ AsciiStrCpyS (\r
+ PrivateFile->FileName,\r
+ AsciiStrSize (Private->FilePath),\r
+ Private->FilePath\r
+ );\r
\r
PrivateFile->Signature = EMU_EFI_FILE_PRIVATE_SIGNATURE;\r
PrivateFile->Thunk = Private->Thunk;\r
EFI_FILE_INFO *Info;\r
struct stat finfo;\r
int res;\r
-\r
+ UINTN Size;\r
\r
PrivateFile = EMU_EFI_FILE_PRIVATE_DATA_FROM_THIS (This);\r
PrivateRoot = EMU_SIMPLE_FILE_SYSTEM_PRIVATE_DATA_FROM_THIS (PrivateFile->SimpleFileSystem);\r
\r
CopyMem (NewPrivateFile, PrivateFile, sizeof (EMU_EFI_FILE_PRIVATE));\r
\r
- NewPrivateFile->FileName = malloc (AsciiStrSize (PrivateFile->FileName) + 1 + StrLen (FileName) + 1);\r
+ Size = AsciiStrSize (PrivateFile->FileName) + 1 + StrLen (FileName) + 1;\r
+ NewPrivateFile->FileName = malloc (Size);\r
if (NewPrivateFile->FileName == NULL) {\r
goto Done;\r
}\r
\r
if (*FileName == L'\\') {\r
- AsciiStrCpy (NewPrivateFile->FileName, PrivateRoot->FilePath);\r
+ AsciiStrCpyS (NewPrivateFile->FileName, Size, PrivateRoot->FilePath);\r
// Skip first '\'.\r
Src = FileName + 1;\r
} else {\r
- AsciiStrCpy (NewPrivateFile->FileName, PrivateFile->FileName);\r
+ AsciiStrCpyS (NewPrivateFile->FileName, Size, PrivateFile->FileName);\r
Src = FileName;\r
}\r
Dst = NewPrivateFile->FileName + AsciiStrLen (NewPrivateFile->FileName);\r
UINTN NameSize;\r
UINTN ResultSize;\r
CHAR8 *FullFileName;\r
-\r
+ UINTN FullFileNameSize;\r
\r
PrivateFile = EMU_EFI_FILE_PRIVATE_DATA_FROM_THIS (This);\r
\r
\r
*BufferSize = ResultSize;\r
\r
- FullFileName = malloc (AsciiStrLen(PrivateFile->FileName) + 1 + NameSize);\r
+ FullFileNameSize = AsciiStrLen(PrivateFile->FileName) + 1 + NameSize;\r
+ FullFileName = malloc (FullFileNameSize);\r
if (FullFileName == NULL) {\r
Status = EFI_OUT_OF_RESOURCES;\r
goto Done;\r
}\r
\r
- AsciiStrCpy (FullFileName, PrivateFile->FileName);\r
- AsciiStrCat (FullFileName, "/");\r
- AsciiStrCat (FullFileName, PrivateFile->Dirent->d_name);\r
+ AsciiStrCpyS (FullFileName, FullFileNameSize, PrivateFile->FileName);\r
+ AsciiStrCatS (FullFileName, FullFileNameSize, "/");\r
+ AsciiStrCatS (FullFileName, FullFileNameSize, PrivateFile->Dirent->d_name);\r
Status = UnixSimpleFileSystemFileInfo (\r
PrivateFile,\r
FullFileName,\r
FileSystemInfoBuffer->BlockSize = buf.f_bsize;\r
\r
\r
- StrCpy ((CHAR16 *) FileSystemInfoBuffer->VolumeLabel, PrivateRoot->VolumeLabel);\r
+ StrCpyS (\r
+ (CHAR16 *) FileSystemInfoBuffer->VolumeLabel,\r
+ (*BufferSize - SIZE_OF_EFI_FILE_SYSTEM_INFO) / sizeof (CHAR16),\r
+ PrivateRoot->VolumeLabel\r
+ );\r
*BufferSize = SIZE_OF_EFI_FILE_SYSTEM_INFO + StrSize (PrivateRoot->VolumeLabel);\r
\r
} else if (CompareGuid (InformationType, &gEfiFileSystemVolumeLabelInfoIdGuid)) {\r
return EFI_BUFFER_TOO_SMALL;\r
}\r
\r
- StrCpy ((CHAR16 *) Buffer, PrivateRoot->VolumeLabel);\r
+ StrCpyS (\r
+ (CHAR16 *) Buffer,\r
+ *BufferSize / sizeof (CHAR16),\r
+ PrivateRoot->VolumeLabel\r
+ );\r
*BufferSize = StrSize (PrivateRoot->VolumeLabel);\r
\r
}\r
CHAR16 *UnicodeFilePtr;\r
int UnixStatus;\r
struct utimbuf Utime;\r
-\r
+ UINTN Size;\r
\r
PrivateFile = EMU_EFI_FILE_PRIVATE_DATA_FROM_THIS (This);\r
PrivateRoot = EMU_SIMPLE_FILE_SYSTEM_PRIVATE_DATA_FROM_THIS (PrivateFile->SimpleFileSystem);\r
goto Done;\r
}\r
\r
- StrCpy (PrivateRoot->VolumeLabel, NewFileSystemInfo->VolumeLabel);\r
+ StrCpyS (\r
+ PrivateRoot->VolumeLabel,\r
+ StrSize (NewFileSystemInfo->VolumeLabel) / sizeof (CHAR16),\r
+ NewFileSystemInfo->VolumeLabel\r
+ );\r
\r
Status = EFI_SUCCESS;\r
goto Done;\r
goto Done;\r
}\r
\r
- StrCpy (PrivateRoot->VolumeLabel, (CHAR16 *) Buffer);\r
+ StrCpyS (\r
+ PrivateRoot->VolumeLabel,\r
+ StrSize (PrivateRoot->VolumeLabel) / sizeof (CHAR16),\r
+ (CHAR16 *) Buffer\r
+ );\r
\r
Status = EFI_SUCCESS;\r
goto Done;\r
goto Done;\r
}\r
\r
- AsciiStrCpy (OldFileName, PrivateFile->FileName);\r
+ AsciiStrCpyS (\r
+ OldFileName,\r
+ AsciiStrSize (PrivateFile->FileName),\r
+ PrivateFile->FileName\r
+ );\r
\r
//\r
// Make full pathname from new filename and rootpath.\r
//\r
if (NewFileInfo->FileName[0] == '\\') {\r
- NewFileName = malloc (AsciiStrLen (PrivateRoot->FilePath) + 1 + StrLen (NewFileInfo->FileName) + 1);\r
+ Size = AsciiStrLen (PrivateRoot->FilePath) + 1 + StrLen (NewFileInfo->FileName) + 1;\r
+ NewFileName = malloc (Size);\r
if (NewFileName == NULL) {\r
goto Done;\r
}\r
\r
- AsciiStrCpy (NewFileName, PrivateRoot->FilePath);\r
+ AsciiStrCpyS (NewFileName, Size, PrivateRoot->FilePath);\r
AsciiFilePtr = NewFileName + AsciiStrLen(NewFileName);\r
UnicodeFilePtr = NewFileInfo->FileName + 1;\r
*AsciiFilePtr++ ='/';\r
} else {\r
- NewFileName = malloc (AsciiStrLen (PrivateFile->FileName) + 2 + StrLen (NewFileInfo->FileName) + 1);\r
+ Size = AsciiStrLen (PrivateFile->FileName) + 2 + StrLen (NewFileInfo->FileName) + 1;\r
+ NewFileName = malloc (Size);\r
if (NewFileName == NULL) {\r
goto Done;\r
}\r
\r
- AsciiStrCpy (NewFileName, PrivateRoot->FilePath);\r
+ AsciiStrCpyS (NewFileName, Size, PrivateRoot->FilePath);\r
AsciiFilePtr = NewFileName + AsciiStrLen(NewFileName);\r
if ((AsciiFilePtr[-1] != '/') && (NewFileInfo->FileName[0] != '/')) {\r
// make sure there is a / between Root FilePath and NewFileInfo Filename\r
goto Done;\r
}\r
\r
- AsciiStrCpy (PrivateFile->FileName, NewFileName);\r
+ AsciiStrCpyS (\r
+ PrivateFile->FileName,\r
+ AsciiStrSize (NewFileName),\r
+ NewFileName\r
+ );\r
} else {\r
Status = EFI_DEVICE_ERROR;\r
goto Done;\r
free (Private);\r
return EFI_OUT_OF_RESOURCES;\r
}\r
- StrCpy (Private->VolumeLabel, L"EFI_EMULATED");\r
+ StrCpyS (\r
+ Private->VolumeLabel,\r
+ StrSize (L"EFI_EMULATED") / sizeof (CHAR16),\r
+ L"EFI_EMULATED"\r
+ );\r
\r
Private->Signature = EMU_SIMPLE_FILE_SYSTEM_PRIVATE_SIGNATURE;\r
Private->Thunk = This;\r