BaseTools/C/Common: Fix potential memory leak

Cc: Liming Gao <liming.gao@intel.com>
Cc: Yonghong Zhu <yonghong.zhu@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Hao Wu <hao.a.wu@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
This commit is contained in:
Hao Wu
2016-09-28 11:18:12 +08:00
parent 5e85fb52d0
commit aee346514d
4 changed files with 36 additions and 12 deletions

View File

@@ -934,7 +934,9 @@ Extract (
UINT32 ScratchSize;
EFI_STATUS Status;
Status = EFI_SUCCESS;
Scratch = NULL;
Status = EFI_SUCCESS;
switch (Algorithm) {
case 0:
*Destination = (VOID *)malloc(SrcSize);
@@ -948,30 +950,44 @@ Extract (
Status = EfiGetInfo(Source, SrcSize, DstSize, &ScratchSize);
if (Status == EFI_SUCCESS) {
Scratch = (VOID *)malloc(ScratchSize);
*Destination = (VOID *)malloc(*DstSize);
if (Scratch != NULL && *Destination != NULL) {
Status = EfiDecompress(Source, SrcSize, *Destination, *DstSize, Scratch, ScratchSize);
} else {
Status = EFI_OUT_OF_RESOURCES;
if (Scratch == NULL) {
return EFI_OUT_OF_RESOURCES;
}
*Destination = (VOID *)malloc(*DstSize);
if (*Destination == NULL) {
free (Scratch);
return EFI_OUT_OF_RESOURCES;
}
Status = EfiDecompress(Source, SrcSize, *Destination, *DstSize, Scratch, ScratchSize);
}
break;
case 2:
Status = TianoGetInfo(Source, SrcSize, DstSize, &ScratchSize);
if (Status == EFI_SUCCESS) {
Scratch = (VOID *)malloc(ScratchSize);
*Destination = (VOID *)malloc(*DstSize);
if (Scratch != NULL && *Destination != NULL) {
Status = TianoDecompress(Source, SrcSize, *Destination, *DstSize, Scratch, ScratchSize);
} else {
Status = EFI_OUT_OF_RESOURCES;
if (Scratch == NULL) {
return EFI_OUT_OF_RESOURCES;
}
*Destination = (VOID *)malloc(*DstSize);
if (*Destination == NULL) {
free (Scratch);
return EFI_OUT_OF_RESOURCES;
}
Status = TianoDecompress(Source, SrcSize, *Destination, *DstSize, Scratch, ScratchSize);
}
break;
default:
Status = EFI_INVALID_PARAMETER;
}
if (Scratch != NULL) {
free (Scratch);
}
return Status;
}