} else {\r
Length = strlen(Str);\r
if (Length < 4) {\r
- strncpy (TemStr + 4 - Length, Str, Length);\r
+ memcpy (TemStr + 4 - Length, Str, Length);\r
} else {\r
- strncpy (TemStr, Str + Length - 4, 4);\r
+ memcpy (TemStr, Str + Length - 4, 4);\r
}\r
\r
sscanf (\r
}\r
} else if (strnicmp (*TokenStr, "COMP_BIN", 8) == 0) {\r
TokenStr++;\r
- strcpy (VtfInfo->CompBinName, *TokenStr);\r
+ if (strlen (*TokenStr) >= FILE_NAME_SIZE) {\r
+ Error (NULL, 0, 3000, "Invalid", "The 'COMP_BIN' name is too long.");\r
+ return ;\r
+ }\r
+ strncpy (VtfInfo->CompBinName, *TokenStr, FILE_NAME_SIZE - 1);\r
+ VtfInfo->CompBinName[FILE_NAME_SIZE - 1] = 0;\r
} else if (strnicmp (*TokenStr, "COMP_SYM", 8) == 0) {\r
TokenStr++;\r
- strcpy (VtfInfo->CompSymName, *TokenStr);\r
+ if (strlen (*TokenStr) >= FILE_NAME_SIZE) {\r
+ Error (NULL, 0, 3000, "Invalid", "The 'COMP_SYM' name is too long.");\r
+ return ;\r
+ }\r
+ strncpy (VtfInfo->CompSymName, *TokenStr, FILE_NAME_SIZE - 1);\r
+ VtfInfo->CompSymName[FILE_NAME_SIZE - 1] = 0;\r
} else if (strnicmp (*TokenStr, "COMP_SIZE", 9) == 0) {\r
TokenStr++;\r
if (strnicmp (*TokenStr, "-", 1) == 0) {\r
if (SectionOptionFlag) {\r
if (stricmp (*TokenStr, "IA32_RST_BIN") == 0) {\r
TokenStr++;\r
- strcpy (IA32BinFile, *TokenStr);\r
+ if (strlen (*TokenStr) >= FILE_NAME_SIZE) {\r
+ Error (NULL, 0, 3000, "Invalid", "The 'IA32_RST_BIN' name is too long.");\r
+ break;\r
+ }\r
+ strncpy (IA32BinFile, *TokenStr, FILE_NAME_SIZE - 1);\r
+ IA32BinFile[FILE_NAME_SIZE - 1] = 0;\r
}\r
}\r
\r
if (SectionCompFlag) {\r
if (stricmp (*TokenStr, "COMP_NAME") == 0) {\r
TokenStr++;\r
- strcpy (FileListPtr->CompName, *TokenStr);\r
+ if (strlen (*TokenStr) >= COMPONENT_NAME_SIZE) {\r
+ Error (NULL, 0, 3000, "Invalid", "The 'COMP_NAME' name is too long.");\r
+ break;\r
+ }\r
+ strncpy (FileListPtr->CompName, *TokenStr, COMPONENT_NAME_SIZE - 1);\r
+ FileListPtr->CompName[COMPONENT_NAME_SIZE - 1] = 0;\r
TokenStr++;\r
ParseAndUpdateComponents (FileListPtr);\r
}\r
//\r
// Use the file name minus extension as the base for tokens\r
//\r
- strcpy (BaseToken, SourceFileName);\r
+ if (strlen (SourceFileName) >= MAX_LONG_FILE_PATH) {\r
+ fclose (SourceFile);\r
+ Error (NULL, 0, 2000, "Invalid parameter", "The source file name is too long.");\r
+ return EFI_ABORTED;\r
+ }\r
+ strncpy (BaseToken, SourceFileName, MAX_LONG_FILE_PATH - 1);\r
+ BaseToken[MAX_LONG_FILE_PATH - 1] = 0;\r
strtok (BaseToken, ". \t\n");\r
- strcat (BaseToken, "__");\r
+ if (strlen (BaseToken) + strlen ("__") >= MAX_LONG_FILE_PATH) {\r
+ fclose (SourceFile);\r
+ Error (NULL, 0, 2000, "Invalid parameter", "The source file name is too long.");\r
+ return EFI_ABORTED;\r
+ }\r
+ strncat (BaseToken, "__", MAX_LONG_FILE_PATH - strlen (BaseToken) - 1);\r
\r
//\r
// Open the destination file\r