Properly close files after read file failure to prevent potential
authorBruce Momjian <bruce@momjian.us>
Tue, 28 Sep 2010 19:25:12 +0000 (19:25 +0000)
committerBruce Momjian <bruce@momjian.us>
Tue, 28 Sep 2010 19:28:34 +0000 (19:28 +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 11f1d4bbcbd0842bf65d47a07e9d4526352519c6..473b029d0ae537f5a713eb4bb6e5c69f8af36e26 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 e732e22bbcbd8583fd55ee15d533feeb0d50c341..cc0ef54a8add613b82226016f5e84edce318f03e 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);