]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Fix failure to advance content pointer in sendFileWithContent.
authorRobert Haas <rhaas@postgresql.org>
Mon, 12 Dec 2022 15:17:02 +0000 (10:17 -0500)
committerRobert Haas <rhaas@postgresql.org>
Mon, 12 Dec 2022 15:33:02 +0000 (10:33 -0500)
If sendFileWithContent were used to send a file larger than the
bbsink buffer size, this would result in corruption. The only
files that are sent via sendFileWithContent are the backup label
file, the tablespace map file, and .done files for WAL segments
included in the backup. Of these, it seems that only the
tablespace_map file can become large enough to cause a problem,
and then only if you have a lot of tablespaces. If you do have
that situation, you might end up with a corrupted
tablespace_map file, which would be bad.

My commit bef47ff85df18bf4a3a9b13bd2a54820e27f3614 introduced
this problem.

Report and patch by Antonin Houska.

Discussion: http://postgr.es/m/15764.1670528645@antos

src/backend/backup/basebackup.c

index 759823f1bed7f2e1c8d5b691c7f2c36d10b7313e..3ffd2f4c122cf379a46f6e434efe0063fae65bde 100644 (file)
@@ -1057,6 +1057,7 @@ sendFileWithContent(bbsink *sink, const char *filename, const char *content,
                memcpy(sink->bbs_buffer, content, nbytes);
                bbsink_archive_contents(sink, nbytes);
                bytes_done += nbytes;
+               content += nbytes;
        }
 
        _tarWritePadding(sink, len);