summaryrefslogtreecommitdiff
path: root/BaseTools/Source
diff options
context:
space:
mode:
authorHao Wu <hao.a.wu@intel.com>2016-10-11 16:08:16 +0800
committerHao Wu <hao.a.wu@intel.com>2016-11-08 16:38:18 +0800
commitd6a1ce3b130800b84c1335a810798e6147eca431 (patch)
treebd7422762e0e49d6a329c52756f9d4732043e8d1 /BaseTools/Source
parent5baa399e50854317c8788bc1cbae09c1af3b34c6 (diff)
downloadedk2-platforms-d6a1ce3b130800b84c1335a810798e6147eca431.tar.xz
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>
Diffstat (limited to 'BaseTools/Source')
-rw-r--r--BaseTools/Source/C/VolInfo/VolInfo.c31
1 files changed, 30 insertions, 1 deletions
diff --git a/BaseTools/Source/C/VolInfo/VolInfo.c b/BaseTools/Source/C/VolInfo/VolInfo.c
index 07840bf669..5285acdb97 100644
--- a/BaseTools/Source/C/VolInfo/VolInfo.c
+++ b/BaseTools/Source/C/VolInfo/VolInfo.c
@@ -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;
}