Fix: leaking file descriptors

(cherry picked from commit 495d73a67f)
This commit is contained in:
Rubidium
2021-05-09 23:00:36 +02:00
committed by Jonathan G Rennison
parent 7c4d803265
commit 2606f5409a
2 changed files with 9 additions and 2 deletions

View File

@@ -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;