Remove SafeFreePool from MemoryAllocationLib as this API's name is misleading. Its implementation only check if a pointer is NULL. If a garbage pointer is passed in, the gBS->FreePool will still ASSERT in debug build and return error code.
It is recommended that module writer should keep track how a pointer is allocated and free it after use. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@6306 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
@@ -445,7 +445,9 @@ DestroyExpression (
|
||||
OpCode = EXPRESSION_OPCODE_FROM_LINK (Link);
|
||||
RemoveEntryList (&OpCode->Link);
|
||||
|
||||
SafeFreePool (OpCode->ValueList);
|
||||
if (OpCode->ValueList != NULL) {
|
||||
FreePool (OpCode->ValueList);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
@@ -473,25 +475,41 @@ DestroyStorage (
|
||||
return;
|
||||
}
|
||||
|
||||
SafeFreePool (Storage->Name);
|
||||
SafeFreePool (Storage->Buffer);
|
||||
SafeFreePool (Storage->EditBuffer);
|
||||
if (Storage->Name != NULL) {
|
||||
FreePool (Storage->Name);
|
||||
}
|
||||
if (Storage->Buffer != NULL) {
|
||||
FreePool (Storage->Buffer);
|
||||
}
|
||||
if (Storage->EditBuffer != NULL) {
|
||||
FreePool (Storage->EditBuffer);
|
||||
}
|
||||
|
||||
while (!IsListEmpty (&Storage->NameValueListHead)) {
|
||||
Link = GetFirstNode (&Storage->NameValueListHead);
|
||||
NameValueNode = NAME_VALUE_NODE_FROM_LINK (Link);
|
||||
RemoveEntryList (&NameValueNode->Link);
|
||||
|
||||
SafeFreePool (NameValueNode->Name);
|
||||
SafeFreePool (NameValueNode->Value);
|
||||
SafeFreePool (NameValueNode->EditValue);
|
||||
SafeFreePool (NameValueNode);
|
||||
if (NameValueNode->Name != NULL) {
|
||||
FreePool (NameValueNode->Name);
|
||||
}
|
||||
if (NameValueNode->Value != NULL) {
|
||||
FreePool (NameValueNode->Value);
|
||||
}
|
||||
if (NameValueNode->EditValue != NULL) {
|
||||
FreePool (NameValueNode->EditValue);
|
||||
}
|
||||
FreePool (NameValueNode);
|
||||
}
|
||||
|
||||
SafeFreePool (Storage->ConfigHdr);
|
||||
SafeFreePool (Storage->ConfigRequest);
|
||||
if (Storage->ConfigHdr != NULL) {
|
||||
FreePool (Storage->ConfigHdr);
|
||||
}
|
||||
if (Storage->ConfigRequest != NULL) {
|
||||
FreePool (Storage->ConfigRequest);
|
||||
}
|
||||
|
||||
gBS->FreePool (Storage);
|
||||
FreePool (Storage);
|
||||
}
|
||||
|
||||
|
||||
@@ -555,8 +573,12 @@ DestroyStatement (
|
||||
DestroyExpression (Expression);
|
||||
}
|
||||
|
||||
SafeFreePool (Statement->VariableName);
|
||||
SafeFreePool (Statement->BlockName);
|
||||
if (Statement->VariableName != NULL) {
|
||||
FreePool (Statement->VariableName);
|
||||
}
|
||||
if (Statement->BlockName != NULL) {
|
||||
FreePool (Statement->BlockName);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -623,7 +645,7 @@ DestroyFormSet (
|
||||
//
|
||||
// Free IFR binary buffer
|
||||
//
|
||||
SafeFreePool (FormSet->IfrBinaryData);
|
||||
FreePool (FormSet->IfrBinaryData);
|
||||
|
||||
//
|
||||
// Free FormSet Storage
|
||||
@@ -664,10 +686,14 @@ DestroyFormSet (
|
||||
}
|
||||
}
|
||||
|
||||
SafeFreePool (FormSet->StatementBuffer);
|
||||
SafeFreePool (FormSet->ExpressionBuffer);
|
||||
if (FormSet->StatementBuffer != NULL) {
|
||||
FreePool (FormSet->StatementBuffer);
|
||||
}
|
||||
if (FormSet->ExpressionBuffer != NULL) {
|
||||
FreePool (FormSet->ExpressionBuffer);
|
||||
}
|
||||
|
||||
SafeFreePool (FormSet);
|
||||
FreePool (FormSet);
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user