InputLength = 0;\r
InputFileName = NULL;\r
OutputFileName = NULL;\r
+ InputFile = NULL;\r
+ OutputFile = NULL;\r
DstSize=0;\r
DebugLevel = 0;\r
DebugMode = FALSE;\r
FileBuffer = (UINT8 *) malloc (InputLength);\r
if (FileBuffer == NULL) {\r
Error (NULL, 0, 4001, "Resource:", "Memory cannot be allocated!");\r
- return 1;\r
+ goto ERROR;\r
}\r
\r
Status = GetFileContents (\r
}\r
\r
if (EFI_ERROR(Status)) {\r
- free(FileBuffer);\r
- return 1;\r
+ Error (NULL, 0, 0004, "Error getting contents of file: %s", InputFileName);\r
+ goto ERROR;\r
}\r
\r
if (OutputFileName == NULL) {\r
OutputFile = fopen (LongFilePath (OutputFileName), "wb");\r
if (OutputFile == NULL) {\r
Error (NULL, 0, 0001, "Error opening output file for writing", OutputFileName);\r
- if (InputFile != NULL) {\r
- fclose (InputFile);\r
- }\r
goto ERROR;\r
}\r
\r
}\r
\r
fwrite(OutBuffer,(size_t)DstSize, 1, OutputFile);\r
+ fclose(OutputFile);\r
+ fclose(InputFile);\r
free(Scratch);\r
free(FileBuffer);\r
free(OutBuffer);\r
}\r
\r
fwrite(OutBuffer, (size_t)(Scratch->mOrigSize), 1, OutputFile);\r
+ fclose(OutputFile);\r
+ fclose(InputFile);\r
free(Scratch);\r
free(FileBuffer);\r
free(OutBuffer);\r
DebugMsg(UTILITY_NAME, 0, DebugLevel, "Decoding Error\n", NULL);\r
}\r
}\r
+ if (OutputFile != NULL) {\r
+ fclose(OutputFile);\r
+ }\r
+ if (InputFile != NULL) {\r
+ fclose (InputFile);\r
+ }\r
if (Scratch != NULL) {\r
free(Scratch);\r
}\r
\r
--*/\r
{\r
- Sd->mBitBuf = (UINT32) (Sd->mBitBuf << NumOfBits);\r
+ Sd->mBitBuf = (UINT32) (((UINT64)Sd->mBitBuf) << NumOfBits);\r
\r
while (NumOfBits > Sd->mBitCount) {\r
\r
- Sd->mBitBuf |= (UINT32) (Sd->mSubBitBuf << (NumOfBits = (UINT16) (NumOfBits - Sd->mBitCount)));\r
+ Sd->mBitBuf |= (UINT32) (((UINT64)Sd->mSubBitBuf) << (NumOfBits = (UINT16) (NumOfBits - Sd->mBitCount)));\r
\r
if (Sd->mCompSize > 0) {\r
//\r
for (Char = 0; Char < NumOfChar; Char++) {\r
\r
Len = BitLen[Char];\r
- if (Len == 0) {\r
+ if (Len == 0 || Len >= 17) {\r
continue;\r
}\r
\r
volatile UINT16 Index;\r
UINT32 Mask;\r
\r
+ assert (nn <= NPT);\r
+\r
Number = (UINT16) GetBits (Sd, nbit);\r
\r
if (Number == 0) {\r