mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-28 16:14:04 +02:00
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:
parent
90114c101f
commit
d1f6eb27fe
@ -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,19 +1921,17 @@ Returns:
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (OutputFileName != NULL) {
|
if (OutputFileName == NULL) {
|
||||||
OutputFile = fopen (LongFilePath (OutputFileName), "wb");
|
OutputFileName = DEFAULT_OUTPUT_FILE;
|
||||||
if (OutputFile == NULL) {
|
}
|
||||||
Error (NULL, 0, 0001, "Error opening output file for writing", OutputFileName);
|
OutputFile = fopen (LongFilePath (OutputFileName), "wb");
|
||||||
|
if (OutputFile == NULL) {
|
||||||
|
Error (NULL, 0, 0001, "Error opening output file for writing", OutputFileName);
|
||||||
if (InputFile != NULL) {
|
if (InputFile != NULL) {
|
||||||
fclose (InputFile);
|
fclose (InputFile);
|
||||||
}
|
|
||||||
goto ERROR;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
OutputFileName = DEFAULT_OUTPUT_FILE;
|
|
||||||
OutputFile = fopen (LongFilePath (OutputFileName), "wb");
|
|
||||||
}
|
}
|
||||||
|
goto ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
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);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user