On Tue, Mar 31, 2020 at 03:50:34PM -0700, Andres Freund wrote:
> On 2020-03-31 14:10:34 -0400, Robert Haas wrote:
> > +/*
> > + * Attempt to parse the WAL files required to restore from backup using
> > + * pg_waldump.
> > + */
> > +static void
> > +parse_required_wal(validator_context *context, char *pg_waldump_path,
> > + char *wal_directory, manifest_wal_range *first_wal_range)
> > +{
> > + manifest_wal_range *this_wal_range = first_wal_range;
> > +
> > + while (this_wal_range != NULL)
> > + {
> > + char *pg_waldump_cmd;
> > +
> > + pg_waldump_cmd = psprintf("\"%s\" --quiet --path=\"%s\" --timeline=%u --start=%X/%X --end=%X/%X\n",
> > + pg_waldump_path, wal_directory, this_wal_range->tli,
> > + (uint32) (this_wal_range->start_lsn >> 32),
> > + (uint32) this_wal_range->start_lsn,
> > + (uint32) (this_wal_range->end_lsn >> 32),
> > + (uint32) this_wal_range->end_lsn);
> > + if (system(pg_waldump_cmd) != 0)
> > + report_backup_error(context,
> > + "WAL parsing failed for timeline %u",
> > + this_wal_range->tli);
> > +
> > + this_wal_range = this_wal_range->next;
> > + }
> > +}
>
> Should we have a function to properly escape paths in cases like this?
> Not that it's likely or really problematic, but the quoting for path
> could be "circumvented".
Are you looking for appendShellString(), or something different?