Em dom., 23 de jun. de 2024 às 23:56, Richard Guo <guofengli...@gmail.com> escreveu:
> On Mon, Jun 24, 2024 at 7:51 AM Ranier Vilela <ranier...@gmail.com> wrote: > > In src/include/access/xlogbackup.h, the field *name* > > has one byte extra to store null-termination. > > > > But, in the function *do_pg_backup_start*, > > I think that is a mistake in the line (8736): > > > > memcpy(state->name, backupidstr, strlen(backupidstr)); > > > > memcpy with strlen does not copy the whole string. > > strlen returns the exact length of the string, without > > the null-termination. > > I noticed that the two callers of do_pg_backup_start both allocate > BackupState with palloc0. Can we rely on this to ensure that the > BackupState.name is initialized with null-termination? > I do not think so. It seems to me the best solution is to use Michael's suggestion, strlcpy + sizeof. Currently we have this: memcpy(state->name, "longlongpathexample1", strlen("longlongpathexample1")); printf("%s\n", state->name); longlongpathexample1 Next random call: memcpy(state->name, "longpathexample2", strlen("longpathexample2")); printf("%s\n", state->name); longpathexample2ple1 It's not a good idea to use memcpy with strlen. best regards, Ranier Vilela