From: Robert Haas Date: Mon, 27 Apr 2020 17:04:35 +0000 (-0400) Subject: Fix bogus tar-file padding logic for standby.signal. X-Git-Tag: REL_13_BETA1~161 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0278d3f79a30cd9ccd6646b8447b25c60ae7d01d;p=thirdparty%2Fpostgresql.git Fix bogus tar-file padding logic for standby.signal. 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 --- diff --git a/src/bin/pg_basebackup/pg_basebackup.c b/src/bin/pg_basebackup/pg_basebackup.c index faa69d14ceb..c1d3d8624bf 100644 --- a/src/bin/pg_basebackup/pg_basebackup.c +++ b/src/bin/pg_basebackup/pg_basebackup.c @@ -1207,7 +1207,12 @@ ReceiveTarFile(PGconn *conn, PGresult *res, int rownum) time(NULL)); writeTarData(&state, header, sizeof(header)); - writeTarData(&state, 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. + */ } }