From: Andres Freund Date: Sun, 4 Jan 2015 14:35:46 +0000 (+0100) Subject: Fix off-by-one in pg_xlogdump's fuzzy_open_file(). X-Git-Tag: REL9_4_1~65 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=835a48702e550b6c9958bb053aa6c458971536d0;p=postgresql Fix off-by-one in pg_xlogdump's fuzzy_open_file(). 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. --- diff --git a/contrib/pg_xlogdump/pg_xlogdump.c b/contrib/pg_xlogdump/pg_xlogdump.c index 824b8c393c..37a4c44acd 100644 --- a/contrib/pg_xlogdump/pg_xlogdump.c +++ b/contrib/pg_xlogdump/pg_xlogdump.c @@ -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;