From f175884520949fbc52908d2f4b2baacde5906ebc Mon Sep 17 00:00:00 2001
From: Bruce Momjian <bruce@momjian.us>
Date: Tue, 28 Sep 2010 19:25:12 +0000
Subject: [PATCH] Properly close files after read file failure to prevent
 potential resource leak.  Of course, any such failure aborts pg_upgrade, but
 might as well be clean about it.

Per patch from Grzegorz Ja?kiewicz.
---
 contrib/pg_upgrade/file.c | 3 +++
 contrib/pg_upgrade/page.c | 3 +++
 2 files changed, 6 insertions(+)

diff --git a/contrib/pg_upgrade/file.c b/contrib/pg_upgrade/file.c
index 11f1d4bbcbd..473b029d0ae 100644
--- a/contrib/pg_upgrade/file.c
+++ b/contrib/pg_upgrade/file.c
@@ -74,7 +74,10 @@ copyAndUpdateFile(migratorContext *ctx, pageCnvCtx *pageConverter,
 				return "can't open source file";
 
 			if ((dstfd = open(dst, O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR)) < 0)
+			{
+				fclose(src_fd);
 				return "can't create destination file";
+			}
 
 			while ((bytesRead = read(src_fd, buf, BLCKSZ)) == BLCKSZ)
 			{
diff --git a/contrib/pg_upgrade/page.c b/contrib/pg_upgrade/page.c
index e732e22bbcb..cc0ef54a8ad 100644
--- a/contrib/pg_upgrade/page.c
+++ b/contrib/pg_upgrade/page.c
@@ -103,7 +103,10 @@ getPageVersion(migratorContext *ctx, uint16 *version, const char *pathName)
 		return "can't open relation";
 
 	if ((bytesRead = read(relfd, &page, sizeof(page))) != sizeof(page))
+	{
+		close(relfd);
 		return "can't read page header";
+	}
 
 	*version = PageGetPageLayoutVersion(&page);
 
-- 
GitLab