Fix for checksum validation patch

Reorder the check for non-BLCKSZ size reads to make sure we don't abort
sending the file in this case.

Missed in the previous commit.
This commit is contained in:
Magnus Hagander 2018-04-03 13:57:49 +02:00
parent 4eb77d50c2
commit a08dc71195

View File

@ -1409,8 +1409,6 @@ sendFile(const char *readfilename, const char *tarfilename, struct stat *statbuf
} }
while ((cnt = fread(buf, 1, Min(sizeof(buf), statbuf->st_size - len), fp)) > 0) while ((cnt = fread(buf, 1, Min(sizeof(buf), statbuf->st_size - len), fp)) > 0)
{
if (verify_checksum)
{ {
/* /*
* The checksums are verified at block level, so we iterate over * The checksums are verified at block level, so we iterate over
@ -1420,7 +1418,7 @@ sendFile(const char *readfilename, const char *tarfilename, struct stat *statbuf
*/ */
Assert(TAR_SEND_SIZE % BLCKSZ == 0); Assert(TAR_SEND_SIZE % BLCKSZ == 0);
if (cnt % BLCKSZ != 0) if (verify_checksum && (cnt % BLCKSZ != 0))
{ {
ereport(WARNING, ereport(WARNING,
(errmsg("cannot verify checksum in file \"%s\", block " (errmsg("cannot verify checksum in file \"%s\", block "
@ -1428,8 +1426,10 @@ sendFile(const char *readfilename, const char *tarfilename, struct stat *statbuf
"differ", "differ",
readfilename, blkno, (int) cnt, BLCKSZ))); readfilename, blkno, (int) cnt, BLCKSZ)));
verify_checksum = false; verify_checksum = false;
continue;
} }
if (verify_checksum)
{
for (i = 0; i < cnt / BLCKSZ; i++) for (i = 0; i < cnt / BLCKSZ; i++)
{ {
page = buf + BLCKSZ * i; page = buf + BLCKSZ * i;