Fix off-by-one in pg_xlogdump's fuzzy_open_file().
authorAndres Freund
Sun, 4 Jan 2015 14:35:47 +0000 (15:35 +0100)
committerAndres Freund
Sun, 4 Jan 2015 14:35:47 +0000 (15:35 +0100)
In the unlikely case of stdin (fd 0) being closed, the off-by-one
would lead to pg_xlogdump failing to open files.

Spotted by Coverity.

Backpatch to 9.3 where pg_xlogdump was introduced.

contrib/pg_xlogdump/pg_xlogdump.c

index 24ca4fa8552397c09ee88f894cf96b6a69e4e510..666c3409feb68134d476f3c2eb40633ad58f643e 100644 (file)
@@ -151,7 +151,7 @@ fuzzy_open_file(const char *directory, const char *fname)
        fd = open(fname, O_RDONLY | PG_BINARY, 0);
        if (fd < 0 && errno != ENOENT)
            return -1;
-       else if (fd > 0)
+       else if (fd >= 0)
            return fd;
 
        /* XLOGDIR / fname */
@@ -160,7 +160,7 @@ fuzzy_open_file(const char *directory, const char *fname)
        fd = open(fpath, O_RDONLY | PG_BINARY, 0);
        if (fd < 0 && errno != ENOENT)
            return -1;
-       else if (fd > 0)
+       else if (fd >= 0)
            return fd;
 
        datadir = getenv("PGDATA");
@@ -172,7 +172,7 @@ fuzzy_open_file(const char *directory, const char *fname)
            fd = open(fpath, O_RDONLY | PG_BINARY, 0);
            if (fd < 0 && errno != ENOENT)
                return -1;
-           else if (fd > 0)
+           else if (fd >= 0)
                return fd;
        }
    }
@@ -184,7 +184,7 @@ fuzzy_open_file(const char *directory, const char *fname)
        fd = open(fpath, O_RDONLY | PG_BINARY, 0);
        if (fd < 0 && errno != ENOENT)
            return -1;
-       else if (fd > 0)
+       else if (fd >= 0)
            return fd;
 
        /* directory / XLOGDIR / fname */
@@ -193,7 +193,7 @@ fuzzy_open_file(const char *directory, const char *fname)
        fd = open(fpath, O_RDONLY | PG_BINARY, 0);
        if (fd < 0 && errno != ENOENT)
            return -1;
-       else if (fd > 0)
+       else if (fd >= 0)
            return fd;
    }
    return -1;