]> granicus.if.org Git - postgresql/commitdiff
Fix for checksum validation patch
authorMagnus Hagander <magnus@hagander.net>
Tue, 3 Apr 2018 11:57:49 +0000 (13:57 +0200)
committerMagnus Hagander <magnus@hagander.net>
Tue, 3 Apr 2018 11:57:49 +0000 (13:57 +0200)
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.

src/backend/replication/basebackup.c

index 300dbfbcd6a54d59617722b1292e7361eb5aac75..c5b83232fdfca3d15d7da34d552ac95f38399371 100644 (file)
@@ -1410,26 +1410,26 @@ sendFile(const char *readfilename, const char *tarfilename, struct stat *statbuf
 
        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 buffer in chunks of BLCKSZ, after making sure that
+                * TAR_SEND_SIZE/buf is divisible by BLCKSZ and we read a multiple
+                * of BLCKSZ bytes.
+                */
+               Assert(TAR_SEND_SIZE % BLCKSZ == 0);
+
+               if (verify_checksum && (cnt % BLCKSZ != 0))
                {
-                       /*
-                        * The checksums are verified at block level, so we iterate over
-                        * the buffer in chunks of BLCKSZ, after making sure that
-                        * TAR_SEND_SIZE/buf is divisible by BLCKSZ and we read a multiple
-                        * of BLCKSZ bytes.
-                        */
-                       Assert(TAR_SEND_SIZE % BLCKSZ == 0);
+                       ereport(WARNING,
+                                       (errmsg("cannot verify checksum in file \"%s\", block "
+                                                       "%d: read buffer size %d and page size %d "
+                                                       "differ",
+                                                       readfilename, blkno, (int) cnt, BLCKSZ)));
+                       verify_checksum = false;
+               }
 
-                       if (cnt % BLCKSZ != 0)
-                       {
-                               ereport(WARNING,
-                                               (errmsg("cannot verify checksum in file \"%s\", block "
-                                                               "%d: read buffer size %d and page size %d "
-                                                               "differ",
-                                                               readfilename, blkno, (int) cnt, BLCKSZ)));
-                               verify_checksum = false;
-                               continue;
-                       }
+               if (verify_checksum)
+               {
                        for (i = 0; i < cnt / BLCKSZ; i++)
                        {
                                page = buf + BLCKSZ * i;