From 495d73a67fe924eed5504003a3a5ba30758dcbc5 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sun, 9 May 2021 23:00:36 +0200 Subject: Fix: leaking file descriptors --- src/console_cmds.cpp | 1 + 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; -- cgit v1.2.3-70-g09d2