Fixed a bug when input a invalid token number (not ZERO nor a valid token number) PcdLib should ASSERT.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@802 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
qwang12 2006-07-06 13:34:25 +00:00
parent 3dd19b0d56
commit 2b21a9713c
4 changed files with 52 additions and 41 deletions

View File

@ -499,12 +499,18 @@ DxePcdGetNextToken (
IN OUT UINTN *TokenNumber IN OUT UINTN *TokenNumber
) )
{ {
UINTN ExTokenNumber; EFI_STATUS Status;
Status = EFI_NOT_FOUND;
// //
// Scan the local token space // Scan the local token space
// //
if (Guid == NULL) { if (Guid == NULL) {
if (((*TokenNumber > PEI_NEX_TOKEN_NUMBER) && (*TokenNumber < PEI_LOCAL_TOKEN_NUMBER)) ||
((*TokenNumber > (PEI_LOCAL_TOKEN_NUMBER + DXE_NEX_TOKEN_NUMBER)))) {
return EFI_NOT_FOUND;
}
(*TokenNumber)++; (*TokenNumber)++;
if (*TokenNumber > PEI_NEX_TOKEN_NUMBER && if (*TokenNumber > PEI_NEX_TOKEN_NUMBER &&
*TokenNumber <= PEI_LOCAL_TOKEN_NUMBER) { *TokenNumber <= PEI_LOCAL_TOKEN_NUMBER) {
@ -525,10 +531,9 @@ DxePcdGetNextToken (
} }
if (!PEI_EXMAP_TABLE_EMPTY) { if (!PEI_EXMAP_TABLE_EMPTY) {
ExTokenNumber = *TokenNumber; Status = ExGetNextTokeNumber (
ExTokenNumber = ExGetNextTokeNumber (
Guid, Guid,
ExTokenNumber, TokenNumber,
mPcdDatabase->PeiDb.Init.GuidTable, mPcdDatabase->PeiDb.Init.GuidTable,
sizeof(mPcdDatabase->PeiDb.Init.GuidTable), sizeof(mPcdDatabase->PeiDb.Init.GuidTable),
mPcdDatabase->PeiDb.Init.ExMapTable, mPcdDatabase->PeiDb.Init.ExMapTable,
@ -536,13 +541,14 @@ DxePcdGetNextToken (
); );
} }
if ((ExTokenNumber == PCD_INVALID_TOKEN_NUMBER) && if (Status == EFI_SUCCESS) {
!DXE_EXMAP_TABLE_EMPTY return Status;
) { }
ExTokenNumber = *TokenNumber;
ExTokenNumber = ExGetNextTokeNumber ( if (!DXE_EXMAP_TABLE_EMPTY) {
Status = ExGetNextTokeNumber (
Guid, Guid,
ExTokenNumber, TokenNumber,
mPcdDatabase->DxeDb.Init.GuidTable, mPcdDatabase->DxeDb.Init.GuidTable,
sizeof(mPcdDatabase->DxeDb.Init.GuidTable), sizeof(mPcdDatabase->DxeDb.Init.GuidTable),
mPcdDatabase->DxeDb.Init.ExMapTable, mPcdDatabase->DxeDb.Init.ExMapTable,
@ -550,9 +556,7 @@ DxePcdGetNextToken (
); );
} }
*TokenNumber = ExTokenNumber; return Status;
return EFI_SUCCESS;
} }

View File

@ -109,7 +109,7 @@ GetWorker (
Name = &(StringTable[VariableHead->StringIndex]); Name = &(StringTable[VariableHead->StringIndex]);
VaraiableDefaultBuffer = (UINT8 *) PcdDb + VariableHead->DefaultValueOffset; VaraiableDefaultBuffer = (UINT8 *) PcdDb + VariableHead->DefaultValueOffset;
Status = GetHiiVariable (Guid, Name, (VOID*)&Data, &DataSize); Status = GetHiiVariable (Guid, Name, &Data, &DataSize);
if (Status == EFI_SUCCESS) { if (Status == EFI_SUCCESS) {
if (GetSize == 0) { if (GetSize == 0) {
// //
@ -252,14 +252,14 @@ DxeUnRegisterCallBackWorker (
UINTN EFI_STATUS
ExGetNextTokeNumber ( ExGetNextTokeNumber (
IN CONST EFI_GUID *Guid, IN CONST EFI_GUID *Guid,
IN UINTN TokenNumber, IN OUT UINTN *TokenNumber,
IN EFI_GUID *GuidTable, IN EFI_GUID *GuidTable,
IN UINTN SizeOfGuidTable, IN UINTN SizeOfGuidTable,
IN DYNAMICEX_MAPPING *ExMapTable, IN DYNAMICEX_MAPPING *ExMapTable,
IN UINTN SizeOfExMapTable IN UINTN SizeOfExMapTable
) )
{ {
EFI_GUID *MatchGuid; EFI_GUID *MatchGuid;
@ -269,7 +269,7 @@ ExGetNextTokeNumber (
MatchGuid = ScanGuid (GuidTable, SizeOfGuidTable, Guid); MatchGuid = ScanGuid (GuidTable, SizeOfGuidTable, Guid);
if (MatchGuid == NULL) { if (MatchGuid == NULL) {
return PCD_INVALID_TOKEN_NUMBER; return EFI_NOT_FOUND;
} }
Found = FALSE; Found = FALSE;
@ -282,35 +282,39 @@ ExGetNextTokeNumber (
} }
if (Found) { if (Found) {
if (TokenNumber == PCD_INVALID_TOKEN_NUMBER) { if (*TokenNumber == PCD_INVALID_TOKEN_NUMBER) {
return ExMapTable[Idx].ExTokenNumber; *TokenNumber = ExMapTable[Idx].ExTokenNumber;
return EFI_SUCCESS;
} }
for ( ; Idx < SizeOfExMapTable; Idx++) { for ( ; Idx < SizeOfExMapTable; Idx++) {
if (ExMapTable[Idx].ExTokenNumber == TokenNumber) { if (ExMapTable[Idx].ExTokenNumber == *TokenNumber) {
Idx++; Idx++;
if (Idx == SizeOfExMapTable) { if (Idx == SizeOfExMapTable) {
// //
// Exceed the length of ExMap Table // Exceed the length of ExMap Table
// //
return PCD_INVALID_TOKEN_NUMBER; *TokenNumber = PCD_INVALID_TOKEN_NUMBER;
return EFI_SUCCESS;
} else if (ExMapTable[Idx].ExGuidIndex == GuidTableIdx) { } else if (ExMapTable[Idx].ExGuidIndex == GuidTableIdx) {
// //
// Found the next match // Found the next match
// //
return ExMapTable[Idx].ExTokenNumber; *TokenNumber = ExMapTable[Idx].ExTokenNumber;
return EFI_SUCCESS;
} else { } else {
// //
// Guid has been changed. It is the next Token Space Guid. // Guid has been changed. It is the next Token Space Guid.
// We should flag no more TokenNumber. // We should flag no more TokenNumber.
// //
return PCD_INVALID_TOKEN_NUMBER; *TokenNumber = PCD_INVALID_TOKEN_NUMBER;
return EFI_SUCCESS;
} }
} }
} }
} }
return PCD_INVALID_TOKEN_NUMBER; return EFI_NOT_FOUND;
} }
@ -375,13 +379,13 @@ EFI_STATUS
GetHiiVariable ( GetHiiVariable (
IN EFI_GUID *VariableGuid, IN EFI_GUID *VariableGuid,
IN UINT16 *VariableName, IN UINT16 *VariableName,
OUT VOID **VariableData, OUT UINT8 **VariableData,
OUT UINTN *VariableSize OUT UINTN *VariableSize
) )
{ {
UINTN Size; UINTN Size;
EFI_STATUS Status; EFI_STATUS Status;
VOID *Buffer; UINT8 *Buffer;
Size = 0; Size = 0;
Buffer = NULL; Buffer = NULL;
@ -395,7 +399,7 @@ GetHiiVariable (
); );
if (Status == EFI_BUFFER_TOO_SMALL) { if (Status == EFI_BUFFER_TOO_SMALL) {
Buffer = AllocatePool (Size); Buffer = (UINT8 *) AllocatePool (Size);
ASSERT (Buffer != NULL); ASSERT (Buffer != NULL);

View File

@ -397,7 +397,7 @@ EFI_STATUS
GetHiiVariable ( GetHiiVariable (
IN EFI_GUID *VariableGuid, IN EFI_GUID *VariableGuid,
IN UINT16 *VariableName, IN UINT16 *VariableName,
OUT VOID **VariableData, OUT UINT8 **VariableData,
OUT UINTN *VariableSize OUT UINTN *VariableSize
) )
; ;
@ -441,14 +441,14 @@ GetExPcdTokenNumber (
UINTN EFI_STATUS
ExGetNextTokeNumber ( ExGetNextTokeNumber (
IN CONST EFI_GUID *Guid, IN CONST EFI_GUID *Guid,
IN UINTN TokenNumber, IN OUT UINTN *TokenNumber,
IN EFI_GUID *GuidTable, IN EFI_GUID *GuidTable,
IN UINTN SizeOfGuidTable, IN UINTN SizeOfGuidTable,
IN DYNAMICEX_MAPPING *ExMapTable, IN DYNAMICEX_MAPPING *ExMapTable,
IN UINTN SizeOfExMapTable IN UINTN SizeOfExMapTable
) )
; ;

View File

@ -480,6 +480,9 @@ PeiPcdGetNextToken (
BOOLEAN Found; BOOLEAN Found;
if (Guid == NULL) { if (Guid == NULL) {
if (*TokenNumber > PEI_NEX_TOKEN_NUMBER) {
return EFI_NOT_FOUND;
}
(*TokenNumber)++; (*TokenNumber)++;
if (*TokenNumber > PEI_NEX_TOKEN_NUMBER) { if (*TokenNumber > PEI_NEX_TOKEN_NUMBER) {
*TokenNumber = PCD_INVALID_TOKEN_NUMBER; *TokenNumber = PCD_INVALID_TOKEN_NUMBER;