diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp index 936c5d7cba..bf924d702d 100644 --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -1044,6 +1044,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; } diff --git a/src/network/network_content.cpp b/src/network/network_content.cpp index 9e921c5d05..bc43d94bde 100644 --- a/src/network/network_content.cpp +++ b/src/network/network_content.cpp @@ -418,7 +418,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"); @@ -457,7 +458,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;