BaseTools/VolInfo: Provide string width in '%s' specifier in format string

String width is not specified for '%s' specifier in the format string for
scanf functions.

This commit now specifies the string length for '%s' in format strings
according to the size of receiving buffers.

Cc: Liming Gao <liming.gao@intel.com>
Cc: Yonghong Zhu <yonghong.zhu@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Hao Wu <hao.a.wu@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
This commit is contained in:
Hao Wu 2016-10-11 16:08:16 +08:00
parent 5baa399e50
commit d6a1ce3b13
1 changed files with 30 additions and 1 deletions

View File

@ -2178,6 +2178,8 @@ Returns:
{
FILE *Fptr;
CHAR8 Line[MAX_LINE_LEN];
CHAR8 *FormatString;
INTN FormatLength;
GUID_TO_BASENAME *GPtr;
if ((Fptr = fopen (LongFilePath (FileName), "r")) == NULL) {
@ -2185,18 +2187,44 @@ Returns:
return EFI_DEVICE_ERROR;
}
//
// Generate the format string for fscanf
//
FormatLength = snprintf (
NULL,
0,
"%%%us %%%us",
(unsigned) sizeof (GPtr->Guid) - 1,
(unsigned) sizeof (GPtr->BaseName) - 1
) + 1;
FormatString = (CHAR8 *) malloc (FormatLength);
if (FormatString == NULL) {
fclose (Fptr);
return EFI_OUT_OF_RESOURCES;
}
snprintf (
FormatString,
FormatLength,
"%%%us %%%us",
(unsigned) sizeof (GPtr->Guid) - 1,
(unsigned) sizeof (GPtr->BaseName) - 1
);
while (fgets (Line, sizeof (Line), Fptr) != NULL) {
//
// Allocate space for another guid/basename element
//
GPtr = malloc (sizeof (GUID_TO_BASENAME));
if (GPtr == NULL) {
free (FormatString);
fclose (Fptr);
return EFI_OUT_OF_RESOURCES;
}
memset ((char *) GPtr, 0, sizeof (GUID_TO_BASENAME));
if (sscanf (Line, "%s %s", GPtr->Guid, GPtr->BaseName) == 2) {
if (sscanf (Line, FormatString, GPtr->Guid, GPtr->BaseName) == 2) {
GPtr->Next = mGuidBaseNameList;
mGuidBaseNameList = GPtr;
} else {
@ -2207,6 +2235,7 @@ Returns:
}
}
free (FormatString);
fclose (Fptr);
return EFI_SUCCESS;
}