From: Tom Lane Date: Fri, 22 Nov 2002 03:09:59 +0000 (+0000) Subject: Quote database name properly when invoking pg_dump. Per report from X-Git-Url: http://git.postgresql.org/gitweb/static/gitweb.js?a=commitdiff_plain;h=115dcad9f84dd08bf1f66feea5540f7a1b216755;p=users%2Fbernd%2Fpostgres.git Quote database name properly when invoking pg_dump. Per report from Christopher Kings-Lynne. --- diff --git a/src/bin/pg_dump/pg_dumpall.c b/src/bin/pg_dump/pg_dumpall.c index b3c7bcf0a0..145a8f332e 100644 --- a/src/bin/pg_dump/pg_dumpall.c +++ b/src/bin/pg_dump/pg_dumpall.c @@ -589,10 +589,23 @@ static int runPgDump(const char *dbname) { PQExpBuffer cmd = createPQExpBuffer(); + const char *p; int ret; - appendPQExpBuffer(cmd, "%s %s -X use-set-session-authorization -Fp %s", - pgdumploc, pgdumpopts->data, dbname); + appendPQExpBuffer(cmd, "%s %s -X use-set-session-authorization -Fp '", + pgdumploc, pgdumpopts->data); + + /* Shell quoting is not quite like SQL quoting, so can't use fmtId */ + for (p = dbname; *p; p++) + { + if (*p == '\'') + appendPQExpBuffer(cmd, "'\"'\"'"); + else + appendPQExpBufferChar(cmd, *p); + } + + appendPQExpBufferChar(cmd, '\''); + if (verbose) fprintf(stderr, _("%s: running %s\n"), progname, cmd->data); @@ -600,6 +613,7 @@ runPgDump(const char *dbname) fflush(stderr); ret = system(cmd->data); + destroyPQExpBuffer(cmd); return ret;