mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-12-15 08:20:16 +08:00
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.
This commit is contained in:
parent
14570c2828
commit
d1c575230d
@ -171,7 +171,7 @@ fuzzy_open_file(const char *directory, const char *fname)
|
|||||||
fd = open(fname, O_RDONLY | PG_BINARY, 0);
|
fd = open(fname, O_RDONLY | PG_BINARY, 0);
|
||||||
if (fd < 0 && errno != ENOENT)
|
if (fd < 0 && errno != ENOENT)
|
||||||
return -1;
|
return -1;
|
||||||
else if (fd > 0)
|
else if (fd >= 0)
|
||||||
return fd;
|
return fd;
|
||||||
|
|
||||||
/* XLOGDIR / fname */
|
/* XLOGDIR / fname */
|
||||||
@ -180,7 +180,7 @@ fuzzy_open_file(const char *directory, const char *fname)
|
|||||||
fd = open(fpath, O_RDONLY | PG_BINARY, 0);
|
fd = open(fpath, O_RDONLY | PG_BINARY, 0);
|
||||||
if (fd < 0 && errno != ENOENT)
|
if (fd < 0 && errno != ENOENT)
|
||||||
return -1;
|
return -1;
|
||||||
else if (fd > 0)
|
else if (fd >= 0)
|
||||||
return fd;
|
return fd;
|
||||||
|
|
||||||
datadir = getenv("PGDATA");
|
datadir = getenv("PGDATA");
|
||||||
@ -192,7 +192,7 @@ fuzzy_open_file(const char *directory, const char *fname)
|
|||||||
fd = open(fpath, O_RDONLY | PG_BINARY, 0);
|
fd = open(fpath, O_RDONLY | PG_BINARY, 0);
|
||||||
if (fd < 0 && errno != ENOENT)
|
if (fd < 0 && errno != ENOENT)
|
||||||
return -1;
|
return -1;
|
||||||
else if (fd > 0)
|
else if (fd >= 0)
|
||||||
return fd;
|
return fd;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -204,7 +204,7 @@ fuzzy_open_file(const char *directory, const char *fname)
|
|||||||
fd = open(fpath, O_RDONLY | PG_BINARY, 0);
|
fd = open(fpath, O_RDONLY | PG_BINARY, 0);
|
||||||
if (fd < 0 && errno != ENOENT)
|
if (fd < 0 && errno != ENOENT)
|
||||||
return -1;
|
return -1;
|
||||||
else if (fd > 0)
|
else if (fd >= 0)
|
||||||
return fd;
|
return fd;
|
||||||
|
|
||||||
/* directory / XLOGDIR / fname */
|
/* directory / XLOGDIR / fname */
|
||||||
@ -213,7 +213,7 @@ fuzzy_open_file(const char *directory, const char *fname)
|
|||||||
fd = open(fpath, O_RDONLY | PG_BINARY, 0);
|
fd = open(fpath, O_RDONLY | PG_BINARY, 0);
|
||||||
if (fd < 0 && errno != ENOENT)
|
if (fd < 0 && errno != ENOENT)
|
||||||
return -1;
|
return -1;
|
||||||
else if (fd > 0)
|
else if (fd >= 0)
|
||||||
return fd;
|
return fd;
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
|
Loading…
Reference in New Issue
Block a user