BaseTools/TianoCompress: Avoid possible NULL pointer dereference

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-10-11 10:30:49 +08:00
parent 90114c101f
commit d1f6eb27fe

View File

@ -5,7 +5,7 @@ and Pointers to repeated strings.
This sequence is further divided into Blocks and Huffman codings are applied to This sequence is further divided into Blocks and Huffman codings are applied to
each Block. each Block.
Copyright (c) 2007 - 2014, Intel Corporation. All rights reserved.<BR> Copyright (c) 2007 - 2016, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at which accompanies this distribution. The full text of the license may be found at
@ -240,6 +240,10 @@ Returns:
UINT32 Index; UINT32 Index;
mText = malloc (WNDSIZ * 2 + MAXMATCH); mText = malloc (WNDSIZ * 2 + MAXMATCH);
if (mText == NULL) {
Error (NULL, 0, 4001, "Resource", "memory cannot be allocated!");
return EFI_OUT_OF_RESOURCES;
}
for (Index = 0; Index < WNDSIZ * 2 + MAXMATCH; Index++) { for (Index = 0; Index < WNDSIZ * 2 + MAXMATCH; Index++) {
mText[Index] = 0; mText[Index] = 0;
} }
@ -250,6 +254,11 @@ Returns:
mParent = malloc (WNDSIZ * 2 * sizeof (*mParent)); mParent = malloc (WNDSIZ * 2 * sizeof (*mParent));
mPrev = malloc (WNDSIZ * 2 * sizeof (*mPrev)); mPrev = malloc (WNDSIZ * 2 * sizeof (*mPrev));
mNext = malloc ((MAX_HASH_VAL + 1) * sizeof (*mNext)); mNext = malloc ((MAX_HASH_VAL + 1) * sizeof (*mNext));
if (mLevel == NULL || mChildCount == NULL || mPosition == NULL ||
mParent == NULL || mPrev == NULL || mNext == NULL) {
Error (NULL, 0, 4001, "Resource", "memory cannot be allocated!");
return EFI_OUT_OF_RESOURCES;
}
mBufSiz = BLKSIZ; mBufSiz = BLKSIZ;
mBuf = malloc (mBufSiz); mBuf = malloc (mBufSiz);
@ -1912,7 +1921,9 @@ Returns:
return 1; return 1;
} }
if (OutputFileName != NULL) { if (OutputFileName == NULL) {
OutputFileName = DEFAULT_OUTPUT_FILE;
}
OutputFile = fopen (LongFilePath (OutputFileName), "wb"); OutputFile = fopen (LongFilePath (OutputFileName), "wb");
if (OutputFile == NULL) { if (OutputFile == NULL) {
Error (NULL, 0, 0001, "Error opening output file for writing", OutputFileName); Error (NULL, 0, 0001, "Error opening output file for writing", OutputFileName);
@ -1921,10 +1932,6 @@ Returns:
} }
goto ERROR; goto ERROR;
} }
} else {
OutputFileName = DEFAULT_OUTPUT_FILE;
OutputFile = fopen (LongFilePath (OutputFileName), "wb");
}
if (ENCODE) { if (ENCODE) {
// //
@ -1942,12 +1949,18 @@ Returns:
goto ERROR; goto ERROR;
} }
} }
Status = TianoCompress ((UINT8 *)FileBuffer, InputLength, OutBuffer, &DstSize); Status = TianoCompress ((UINT8 *)FileBuffer, InputLength, OutBuffer, &DstSize);
if (Status != EFI_SUCCESS) { if (Status != EFI_SUCCESS) {
Error (NULL, 0, 0007, "Error compressing file", NULL); Error (NULL, 0, 0007, "Error compressing file", NULL);
goto ERROR; goto ERROR;
} }
if (OutBuffer == NULL) {
Error (NULL, 0, 4001, "Resource:", "Memory cannot be allocated!");
goto ERROR;
}
fwrite(OutBuffer,(size_t)DstSize, 1, OutputFile); fwrite(OutBuffer,(size_t)DstSize, 1, OutputFile);
free(Scratch); free(Scratch);
free(FileBuffer); free(FileBuffer);