pg_waldump: Fix error message for WAL files smaller than XLOG_BLCKSZ.

When opening a WAL file smaller than XLOG_BLCKSZ (e.g. 0 bytes long) while
determining the wal_segment_size, pg_waldump checked errno, despite errno not
being set by the short read. Resulting in a bogus error message.

Author: Kyotaro Horiguchi <horikyota.ntt@gmail.com>
Discussion: https://postgr.es/m/20220214.181847.775024684568733277.horikyota.ntt@gmail.com
Backpatch: 11-, the bug was introducedin fc49e24fa
This commit is contained in:
Andres Freund 2022-02-25 10:40:32 -08:00
parent 3faa21bb76
commit 51c3416561

View File

@ -210,8 +210,10 @@ search_directory(const char *directory, const char *fname)
if (fd >= 0)
{
PGAlignedXLogBlock buf;
int r;
if (read(fd, buf.data, XLOG_BLCKSZ) == XLOG_BLCKSZ)
r = read(fd, buf.data, XLOG_BLCKSZ);
if (r == XLOG_BLCKSZ)
{
XLogLongPageHeader longhdr = (XLogLongPageHeader) buf.data;
@ -223,14 +225,12 @@ search_directory(const char *directory, const char *fname)
WalSegSz),
fname, WalSegSz);
}
else if (r < 0)
fatal_error("could not read file \"%s\": %s",
fname, strerror(errno));
else
{
if (errno != 0)
fatal_error("could not read file \"%s\": %s",
fname, strerror(errno));
else
fatal_error("not enough data in file \"%s\"", fname);
}
fatal_error("not enough data in file \"%s\"", fname);
close(fd);
return true;
}