diff options
author | qwang12 <qwang12@6f19259b-4bc3-4df7-8a09-765794883524> | 2006-07-06 13:34:25 +0000 |
---|---|---|
committer | qwang12 <qwang12@6f19259b-4bc3-4df7-8a09-765794883524> | 2006-07-06 13:34:25 +0000 |
commit | 2b21a9713ce974c14f26dfb5d3496372e04b501b (patch) | |
tree | b83008e7480ff94f7cea085778cac2a60c5f10cc /EdkModulePkg/Universal/PCD/Dxe/Pcd.c | |
parent | 3dd19b0d56310e40705bd6d38524ef488d94ed28 (diff) | |
download | edk2-2b21a9713ce974c14f26dfb5d3496372e04b501b.tar.gz edk2-2b21a9713ce974c14f26dfb5d3496372e04b501b.tar.bz2 edk2-2b21a9713ce974c14f26dfb5d3496372e04b501b.zip |
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
Diffstat (limited to 'EdkModulePkg/Universal/PCD/Dxe/Pcd.c')
-rw-r--r-- | EdkModulePkg/Universal/PCD/Dxe/Pcd.c | 32 |
1 files changed, 18 insertions, 14 deletions
diff --git a/EdkModulePkg/Universal/PCD/Dxe/Pcd.c b/EdkModulePkg/Universal/PCD/Dxe/Pcd.c index b78752df29..115b1ac938 100644 --- a/EdkModulePkg/Universal/PCD/Dxe/Pcd.c +++ b/EdkModulePkg/Universal/PCD/Dxe/Pcd.c @@ -499,12 +499,18 @@ DxePcdGetNextToken ( IN OUT UINTN *TokenNumber
)
{
- UINTN ExTokenNumber;
-
+ EFI_STATUS Status;
+
+ Status = EFI_NOT_FOUND;
//
// Scan the local token space
//
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)++;
if (*TokenNumber > PEI_NEX_TOKEN_NUMBER &&
*TokenNumber <= PEI_LOCAL_TOKEN_NUMBER) {
@@ -525,10 +531,9 @@ DxePcdGetNextToken ( }
if (!PEI_EXMAP_TABLE_EMPTY) {
- ExTokenNumber = *TokenNumber;
- ExTokenNumber = ExGetNextTokeNumber (
+ Status = ExGetNextTokeNumber (
Guid,
- ExTokenNumber,
+ TokenNumber,
mPcdDatabase->PeiDb.Init.GuidTable,
sizeof(mPcdDatabase->PeiDb.Init.GuidTable),
mPcdDatabase->PeiDb.Init.ExMapTable,
@@ -536,13 +541,14 @@ DxePcdGetNextToken ( );
}
- if ((ExTokenNumber == PCD_INVALID_TOKEN_NUMBER) &&
- !DXE_EXMAP_TABLE_EMPTY
- ) {
- ExTokenNumber = *TokenNumber;
- ExTokenNumber = ExGetNextTokeNumber (
+ if (Status == EFI_SUCCESS) {
+ return Status;
+ }
+
+ if (!DXE_EXMAP_TABLE_EMPTY) {
+ Status = ExGetNextTokeNumber (
Guid,
- ExTokenNumber,
+ TokenNumber,
mPcdDatabase->DxeDb.Init.GuidTable,
sizeof(mPcdDatabase->DxeDb.Init.GuidTable),
mPcdDatabase->DxeDb.Init.ExMapTable,
@@ -550,9 +556,7 @@ DxePcdGetNextToken ( );
}
- *TokenNumber = ExTokenNumber;
-
- return EFI_SUCCESS;
+ return Status;
}
|