Skip to content

Commit c496af2

Browse files
committed
Fix huffman.dat file handle leak
1 parent bb49c27 commit c496af2

File tree

1 file changed

+10
-5
lines changed

1 file changed

+10
-5
lines changed

src/qcommon/msg.cpp

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2016,16 +2016,16 @@ qboolean Huff_ReadData(huffman_t *huffman, const char *filename) {
20162016
FS_SV_FOpenFileRead(filename, &fp);
20172017

20182018
if (!fp) {
2019-
Com_DPrintf("Failed to open huffman data from %s\n", filename);
2019+
Com_DPrintf("Failed to open huffman data from %s - recalculating Huffman code...\n", filename);
20202020
return qfalse;
20212021
}
20222022

20232023
if (FS_Read(&version, sizeof(version), fp) != (int)sizeof(version))
20242024
goto corrupted;
20252025

20262026
if (version != HUFF_DATA_VERSION) {
2027-
Com_DPrintf("Huffman data in %s has incompatible version\n", filename);
2028-
return qfalse;
2027+
Com_DPrintf("Huffman data in %s has incompatible version - recalculating Huffman code...\n", filename);
2028+
goto close;
20292029
}
20302030

20312031
memset(&huffman->compressor, 0, sizeof(huff_t));
@@ -2038,7 +2038,7 @@ qboolean Huff_ReadData(huffman_t *huffman, const char *filename) {
20382038
checksum = LittleLong(checksum);
20392039
if (checksum != Com_BlockChecksum(&huffdata, sizeof(huffdata))) {
20402040
Com_Printf(S_COLOR_YELLOW "WARNING: %s checksum mismatch - recalculating Huffman code...", filename);
2041-
return qfalse;
2041+
goto close;
20422042
}
20432043
Huff_Deserialize(&huffdata, &huffman->compressor);
20442044

@@ -2049,13 +2049,18 @@ qboolean Huff_ReadData(huffman_t *huffman, const char *filename) {
20492049
checksum = LittleLong(checksum);
20502050
if (checksum != Com_BlockChecksum(&huffdata, sizeof(huffdata))) {
20512051
Com_Printf(S_COLOR_YELLOW "WARNING: %s checksum mismatch - recalculating Huffman code...", filename);
2052-
return qfalse;
2052+
goto close;
20532053
}
20542054
Huff_Deserialize(&huffdata, &huffman->decompressor);
20552055

2056+
FS_FCloseFile(fp);
2057+
20562058
return qtrue;
20572059
corrupted:
20582060
Com_Printf(S_COLOR_YELLOW "WARNING: %s corrupted - recalculating Huffman code...\n", filename);
2061+
close:
2062+
FS_FCloseFile(fp);
2063+
20592064
return qfalse;
20602065
}
20612066

0 commit comments

Comments
 (0)