postgres.git / summary / log / commit / refs

commit    a08bfe7424929fcba4af9eb8ca80214eca47159a
Author:   Robert Haas <rhaas@postgresql.org>
Date:     Mon Apr 27 17:04:35 2020 +0000
First released in: 13.0, 12.3

    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


src/bin/pg_basebackup/pg_basebackup.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/bin/pg_basebackup/pg_basebackup.c b/src/bin/pg_basebackup/pg_basebackup.c index 5fdc6cfd19b..dfd45aecc56 100644 --- a/src/bin/pg_basebackup/pg_basebackup.c +++ b/src/bin/pg_basebackup/pg_basebackup.c @@ -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. + */ } } [parent: 18f7e856cde4]