mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-03-06 22:28:56 +00:00
Fix: leaking file descriptors
This commit is contained in:
parent
296194ad36
commit
495d73a67f
@ -939,6 +939,7 @@ DEF_CONSOLE_CMD(ConExec)
|
||||
}
|
||||
|
||||
if (_script_current_depth == 11) {
|
||||
FioFCloseFile(script_file);
|
||||
IConsoleError("Maximum 'exec' depth reached; script A is calling script B is calling script C ... more than 10 times.");
|
||||
return true;
|
||||
}
|
||||
|
@ -410,7 +410,8 @@ static bool GunzipFile(const ContentInfo *ci)
|
||||
FILE *ftmp = fopen(GetFullFilename(ci, true).c_str(), "rb");
|
||||
if (ftmp == nullptr) return false;
|
||||
/* Duplicate the handle, and close the FILE*, to avoid double-closing the handle later. */
|
||||
gzFile fin = gzdopen(dup(fileno(ftmp)), "rb");
|
||||
int fdup = dup(fileno(ftmp));
|
||||
gzFile fin = gzdopen(fdup, "rb");
|
||||
fclose(ftmp);
|
||||
|
||||
FILE *fout = fopen(GetFullFilename(ci, false).c_str(), "wb");
|
||||
@ -449,7 +450,12 @@ static bool GunzipFile(const ContentInfo *ci)
|
||||
}
|
||||
}
|
||||
|
||||
if (fin != nullptr) gzclose(fin);
|
||||
if (fin != nullptr) {
|
||||
gzclose(fin);
|
||||
} else if (fdup != -1) {
|
||||
/* Failing gzdopen does not close the passed file descriptor. */
|
||||
close(fdup);
|
||||
}
|
||||
if (fout != nullptr) fclose(fout);
|
||||
|
||||
return ret;
|
||||
|
Loading…
Reference in New Issue
Block a user