Fix bogus tar-file padding logic for standby.signal.
authorRobert Haas
Mon, 27 Apr 2020 17:04:35 +0000 (13:04 -0400)
committerRobert Haas
Mon, 27 Apr 2020 18:00:36 +0000 (14:00 -0400)
When pg_basebackup -R is used, we inject standby.signal into the
tar file for the main tablespace. The proper thing to do is to pad
each file injected into the tar file out to a 512-byte boundary
by appending nulls, but here the file is of length 0 and we add
511 zero bytes.  Since 0 is already a multiple of 512, we should
not add any zero bytes. Do that instead.

Patch by me, reviewed by Tom Lane.

Discussion: http://postgr.es/m/CA+TgmobWbfReO9-XFk8urR1K4wTNwqoHx_v56t7=T8KaiEoKNw@mail.gmail.com

src/bin/pg_basebackup/pg_basebackup.c

index 5fdc6cfd19b30bf22aec0c9cec9eac38ad817083..dfd45aecc5642d96aeeb01367ed2e3a4a0aaae24 100644 (file)
@@ -1131,7 +1131,12 @@ ReceiveTarFile(PGconn *conn, PGresult *res, int rownum)
                                    time(NULL));
 
                    WRITE_TAR_DATA(header, sizeof(header));
-                   WRITE_TAR_DATA(zerobuf, 511);
+
+                   /*
+                    * we don't need to pad out to a multiple of the tar block
+                    * size here, because the file is zero length, which is a
+                    * multiple of any block size.
+                    */
                }
            }