mirror of https://github.com/acidanthera/audk.git
BaseTools/GenVtf: 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:
parent
2a9afe80c3
commit
5baa399e50
|
@ -1045,6 +1045,7 @@ Arguments:
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
EFI_INVALID_PARAMETER - The parameter is invalid
|
EFI_INVALID_PARAMETER - The parameter is invalid
|
||||||
|
EFI_OUT_OF_RESOURCES - Resource can not be allocated
|
||||||
EFI_SUCCESS - The function completed successfully
|
EFI_SUCCESS - The function completed successfully
|
||||||
|
|
||||||
--*/
|
--*/
|
||||||
|
@ -1062,6 +1063,8 @@ Returns:
|
||||||
CHAR8 Buff4[10];
|
CHAR8 Buff4[10];
|
||||||
CHAR8 Buff5[10];
|
CHAR8 Buff5[10];
|
||||||
CHAR8 Token[50];
|
CHAR8 Token[50];
|
||||||
|
CHAR8 *FormatString;
|
||||||
|
INTN FormatLength;
|
||||||
|
|
||||||
Fp = fopen (LongFilePath (VtfInfo->CompSymName), "rb");
|
Fp = fopen (LongFilePath (VtfInfo->CompSymName), "rb");
|
||||||
|
|
||||||
|
@ -1070,10 +1073,47 @@ Returns:
|
||||||
return EFI_INVALID_PARAMETER;
|
return EFI_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Generate the format string for fscanf
|
||||||
|
//
|
||||||
|
FormatLength = snprintf (
|
||||||
|
NULL,
|
||||||
|
0,
|
||||||
|
"%%%us %%%us %%%us %%%us %%%us %%%us %%%us",
|
||||||
|
(unsigned) sizeof (Buff1) - 1,
|
||||||
|
(unsigned) sizeof (Buff2) - 1,
|
||||||
|
(unsigned) sizeof (OffsetStr) - 1,
|
||||||
|
(unsigned) sizeof (Buff3) - 1,
|
||||||
|
(unsigned) sizeof (Buff4) - 1,
|
||||||
|
(unsigned) sizeof (Buff5) - 1,
|
||||||
|
(unsigned) sizeof (Token) - 1
|
||||||
|
) + 1;
|
||||||
|
|
||||||
|
FormatString = (CHAR8 *) malloc (FormatLength);
|
||||||
|
if (FormatString == NULL) {
|
||||||
|
fclose (Fp);
|
||||||
|
|
||||||
|
Error (NULL, 0, 4001, "Resource", "memory cannot be allocated!");
|
||||||
|
return EFI_OUT_OF_RESOURCES;
|
||||||
|
}
|
||||||
|
|
||||||
|
snprintf (
|
||||||
|
FormatString,
|
||||||
|
FormatLength,
|
||||||
|
"%%%us %%%us %%%us %%%us %%%us %%%us %%%us",
|
||||||
|
(unsigned) sizeof (Buff1) - 1,
|
||||||
|
(unsigned) sizeof (Buff2) - 1,
|
||||||
|
(unsigned) sizeof (OffsetStr) - 1,
|
||||||
|
(unsigned) sizeof (Buff3) - 1,
|
||||||
|
(unsigned) sizeof (Buff4) - 1,
|
||||||
|
(unsigned) sizeof (Buff5) - 1,
|
||||||
|
(unsigned) sizeof (Token) - 1
|
||||||
|
);
|
||||||
|
|
||||||
while (fgets (Buff, sizeof (Buff), Fp) != NULL) {
|
while (fgets (Buff, sizeof (Buff), Fp) != NULL) {
|
||||||
fscanf (
|
fscanf (
|
||||||
Fp,
|
Fp,
|
||||||
"%s %s %s %s %s %s %s",
|
FormatString,
|
||||||
Buff1,
|
Buff1,
|
||||||
Buff2,
|
Buff2,
|
||||||
OffsetStr,
|
OffsetStr,
|
||||||
|
@ -1096,6 +1136,10 @@ Returns:
|
||||||
|
|
||||||
memcpy ((VOID *) RelativeAddress, (VOID *) CompStartAddress, sizeof (UINT64));
|
memcpy ((VOID *) RelativeAddress, (VOID *) CompStartAddress, sizeof (UINT64));
|
||||||
|
|
||||||
|
if (FormatString != NULL) {
|
||||||
|
free (FormatString);
|
||||||
|
}
|
||||||
|
|
||||||
if (Fp != NULL) {
|
if (Fp != NULL) {
|
||||||
fclose (Fp);
|
fclose (Fp);
|
||||||
}
|
}
|
||||||
|
@ -2198,6 +2242,8 @@ Returns:
|
||||||
CHAR8 Section[MAX_LONG_FILE_PATH];
|
CHAR8 Section[MAX_LONG_FILE_PATH];
|
||||||
CHAR8 Token[MAX_LONG_FILE_PATH];
|
CHAR8 Token[MAX_LONG_FILE_PATH];
|
||||||
CHAR8 BaseToken[MAX_LONG_FILE_PATH];
|
CHAR8 BaseToken[MAX_LONG_FILE_PATH];
|
||||||
|
CHAR8 *FormatString;
|
||||||
|
INTN FormatLength;
|
||||||
UINT64 TokenAddress;
|
UINT64 TokenAddress;
|
||||||
long StartLocation;
|
long StartLocation;
|
||||||
|
|
||||||
|
@ -2275,6 +2321,37 @@ Returns:
|
||||||
return EFI_ABORTED;
|
return EFI_ABORTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Generate the format string for fscanf
|
||||||
|
//
|
||||||
|
FormatLength = snprintf (
|
||||||
|
NULL,
|
||||||
|
0,
|
||||||
|
"%%%us | %%%us | %%%us | %%%us\n",
|
||||||
|
(unsigned) sizeof (Type) - 1,
|
||||||
|
(unsigned) sizeof (Address) - 1,
|
||||||
|
(unsigned) sizeof (Section) - 1,
|
||||||
|
(unsigned) sizeof (Token) - 1
|
||||||
|
) + 1;
|
||||||
|
|
||||||
|
FormatString = (CHAR8 *) malloc (FormatLength);
|
||||||
|
if (FormatString == NULL) {
|
||||||
|
fclose (SourceFile);
|
||||||
|
fclose (DestFile);
|
||||||
|
Error (NULL, 0, 4001, "Resource", "memory cannot be allocated!");
|
||||||
|
return EFI_ABORTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
snprintf (
|
||||||
|
FormatString,
|
||||||
|
FormatLength,
|
||||||
|
"%%%us | %%%us | %%%us | %%%us\n",
|
||||||
|
(unsigned) sizeof (Type) - 1,
|
||||||
|
(unsigned) sizeof (Address) - 1,
|
||||||
|
(unsigned) sizeof (Section) - 1,
|
||||||
|
(unsigned) sizeof (Token) - 1
|
||||||
|
);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Read in the file
|
// Read in the file
|
||||||
//
|
//
|
||||||
|
@ -2283,7 +2360,7 @@ Returns:
|
||||||
//
|
//
|
||||||
// Read a line
|
// Read a line
|
||||||
//
|
//
|
||||||
if (fscanf (SourceFile, "%s | %s | %s | %s\n", Type, Address, Section, Token) == 4) {
|
if (fscanf (SourceFile, FormatString, Type, Address, Section, Token) == 4) {
|
||||||
|
|
||||||
//
|
//
|
||||||
// Get the token address
|
// Get the token address
|
||||||
|
@ -2306,6 +2383,7 @@ Returns:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
free (FormatString);
|
||||||
fclose (SourceFile);
|
fclose (SourceFile);
|
||||||
fclose (DestFile);
|
fclose (DestFile);
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
|
|
Loading…
Reference in New Issue