]> granicus.if.org Git - postgresql/commitdiff
Fix off-by-one in pg_xlogdump's fuzzy_open_file().
authorAndres Freund <andres@anarazel.de>
Sun, 4 Jan 2015 14:35:46 +0000 (15:35 +0100)
committerAndres Freund <andres@anarazel.de>
Sun, 4 Jan 2015 14:35:46 +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 824b8c393c9f601ccd7539b4347de9196c3546ff..37a4c44acd933f77b7f690fc39da08a8f344f71c 100644 (file)
@@ -152,7 +152,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 */
@@ -161,7 +161,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");
@@ -173,7 +173,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;
                }
        }
@@ -185,7 +185,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 */
@@ -194,7 +194,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;