diff options
author | Hao Wu <hao.a.wu@intel.com> | 2016-09-28 11:18:12 +0800 |
---|---|---|
committer | Hao Wu <hao.a.wu@intel.com> | 2016-11-08 16:37:28 +0800 |
commit | aee346514d224a90622fe4cc553ba8ae79fe2828 (patch) | |
tree | 9820ad9b97859a5e4b83448e293cc4704ce87b5e /BaseTools/Source/C/Common/Decompress.c | |
parent | 5e85fb52d0838b15eb8787d08be27b4f9c3f964a (diff) | |
download | edk2-platforms-aee346514d224a90622fe4cc553ba8ae79fe2828.tar.xz |
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>
Diffstat (limited to 'BaseTools/Source/C/Common/Decompress.c')
-rw-r--r-- | BaseTools/Source/C/Common/Decompress.c | 34 |
1 files changed, 25 insertions, 9 deletions
diff --git a/BaseTools/Source/C/Common/Decompress.c b/BaseTools/Source/C/Common/Decompress.c index 77df89ff48..4b83e88210 100644 --- a/BaseTools/Source/C/Common/Decompress.c +++ b/BaseTools/Source/C/Common/Decompress.c @@ -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);
+ if (Scratch == NULL) {
+ return EFI_OUT_OF_RESOURCES;
+ }
+
*Destination = (VOID *)malloc(*DstSize);
- if (Scratch != NULL && *Destination != NULL) {
- Status = EfiDecompress(Source, SrcSize, *Destination, *DstSize, Scratch, ScratchSize);
- } else {
- Status = EFI_OUT_OF_RESOURCES;
+ 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);
+ if (Scratch == NULL) {
+ return EFI_OUT_OF_RESOURCES;
+ }
+
*Destination = (VOID *)malloc(*DstSize);
- if (Scratch != NULL && *Destination != NULL) {
- Status = TianoDecompress(Source, SrcSize, *Destination, *DstSize, Scratch, ScratchSize);
- } else {
- Status = EFI_OUT_OF_RESOURCES;
+ 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;
}
|