Properly close files after read file failure to prevent potential
authorBruce Momjian <[email protected]>
Tue, 28 Sep 2010 19:25:13 +0000 (19:25 +0000)
committerBruce Momjian <[email protected]>
Tue, 28 Sep 2010 19:25:13 +0000 (19:25 +0000)
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
contrib/pg_upgrade/page.c

index 358fcf51b5a36a7849ead66163fc2fbf35db6238..ef797037fb1b6e9741b21a03c0b4f9ae4082fce3 100644 (file)
@@ -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)
                        {
index de19a0023e0a03e31bb0e84f24e076151656a7ce..4b8a9390f3f8a72b96f21904781d71d58c561684 100644 (file)
@@ -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);