mirror of https://github.com/acidanthera/audk.git
Fix the bug that HiiConfigToBlock doesn't update BlockSize when Block is not large enough
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11085 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
8185265e69
commit
09b794172e
|
@ -3224,6 +3224,10 @@ Exit:
|
||||||
value pair. Block is left updated and
|
value pair. Block is left updated and
|
||||||
Progress points at the '&' preceding the first
|
Progress points at the '&' preceding the first
|
||||||
non-<BlockName>.
|
non-<BlockName>.
|
||||||
|
@retval EFI_DEVICE_ERROR Block not large enough. Progress undefined.
|
||||||
|
@retval EFI_NOT_FOUND Target for the specified routing data was not found.
|
||||||
|
Progress points to the "G" in "GUID" of the errant
|
||||||
|
routing data.
|
||||||
|
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
|
@ -3245,13 +3249,14 @@ HiiConfigToBlock (
|
||||||
UINTN Width;
|
UINTN Width;
|
||||||
UINT8 *Value;
|
UINT8 *Value;
|
||||||
UINTN BufferSize;
|
UINTN BufferSize;
|
||||||
|
UINTN MaxBlockSize;
|
||||||
|
|
||||||
if (This == NULL || BlockSize == NULL || Progress == NULL) {
|
if (This == NULL || BlockSize == NULL || Progress == NULL) {
|
||||||
return EFI_INVALID_PARAMETER;
|
return EFI_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ConfigResp == NULL || Block == NULL) {
|
|
||||||
*Progress = ConfigResp;
|
*Progress = ConfigResp;
|
||||||
|
if (ConfigResp == NULL) {
|
||||||
return EFI_INVALID_PARAMETER;
|
return EFI_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3261,6 +3266,7 @@ HiiConfigToBlock (
|
||||||
StringPtr = ConfigResp;
|
StringPtr = ConfigResp;
|
||||||
BufferSize = *BlockSize;
|
BufferSize = *BlockSize;
|
||||||
Value = NULL;
|
Value = NULL;
|
||||||
|
MaxBlockSize = 0;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Jump <ConfigHdr>
|
// Jump <ConfigHdr>
|
||||||
|
@ -3366,13 +3372,12 @@ HiiConfigToBlock (
|
||||||
//
|
//
|
||||||
// Update the Block with configuration info
|
// Update the Block with configuration info
|
||||||
//
|
//
|
||||||
|
if ((Block != NULL) && (Offset + Width <= BufferSize)) {
|
||||||
if (Offset + Width > BufferSize) {
|
|
||||||
return EFI_DEVICE_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
CopyMem (Block + Offset, Value, Width);
|
CopyMem (Block + Offset, Value, Width);
|
||||||
*BlockSize = Offset + Width - 1;
|
}
|
||||||
|
if (Offset + Width > MaxBlockSize) {
|
||||||
|
MaxBlockSize = Offset + Width;
|
||||||
|
}
|
||||||
|
|
||||||
FreePool (Value);
|
FreePool (Value);
|
||||||
Value = NULL;
|
Value = NULL;
|
||||||
|
@ -3397,6 +3402,17 @@ HiiConfigToBlock (
|
||||||
}
|
}
|
||||||
|
|
||||||
*Progress = StringPtr + StrLen (StringPtr);
|
*Progress = StringPtr + StrLen (StringPtr);
|
||||||
|
*BlockSize = MaxBlockSize - 1;
|
||||||
|
|
||||||
|
if (MaxBlockSize > BufferSize) {
|
||||||
|
*BlockSize = MaxBlockSize;
|
||||||
|
if (Block == NULL) {
|
||||||
|
return EFI_INVALID_PARAMETER;
|
||||||
|
} else {
|
||||||
|
return EFI_DEVICE_ERROR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
|
|
||||||
Exit:
|
Exit:
|
||||||
|
|
Loading…
Reference in New Issue