- if ((LocalTokenNumber & PCD_TYPE_ALL_SET) == (PCD_TYPE_HII|PCD_TYPE_STRING)) {\r
- return (VOID*)&StringTable[*(STRING_HEAD*)((UINT8*)PeiPcdDb + VariableHead->DefaultValueOffset)];\r
- } else {\r
- return (VOID *) ((UINT8 *) PeiPcdDb + VariableHead->DefaultValueOffset);\r
+ VaraiableDefaultBuffer = (UINT8 *) &StringTable[*(STRING_HEAD*)((UINT8*) PeiPcdDb + VariableHead->DefaultValueOffset)]; \r
+ } else {\r
+ VaraiableDefaultBuffer = (UINT8 *) PeiPcdDb + VariableHead->DefaultValueOffset;\r
+ }\r
+ Status = GetHiiVariable (Guid, Name, &Data, &DataSize);\r
+ if ((Status == EFI_SUCCESS) && (DataSize >= (VariableHead->Offset + GetSize))) {\r
+ if (GetSize == 0) {\r
+ //\r
+ // It is a pointer type. So get the MaxSize reserved for\r
+ // this PCD entry.\r
+ //\r
+ GetPtrTypeSize (TokenNumber, &GetSize, PeiPcdDb);\r
+ if (GetSize > (DataSize - VariableHead->Offset)) {\r
+ //\r
+ // Use actual valid size.\r
+ //\r
+ GetSize = DataSize - VariableHead->Offset;\r
+ }\r