diff options
-rw-r--r-- | src/console_cmds.cpp | 1 | ||||
-rw-r--r-- | src/network/network_content.cpp | 10 |
2 files changed, 9 insertions, 2 deletions
diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp index 01c35ecf8..3929b44c1 100644 --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -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; } diff --git a/src/network/network_content.cpp b/src/network/network_content.cpp index 528b7bd77..e4f368618 100644 --- a/src/network/network_content.cpp +++ b/src/network/network_content.cpp @@ -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; |