mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-11-27 07:21:09 +08:00
Fix handling of escape sequences in postgres_fdw.application_name
postgres_fdw.application_name relies on MyProcPort to define the data that should be added to escape sequences %u (user name) or %d (database name). However this code could be run in processes that lack a MyProcPort, like an autovacuum process, causing crashes. The code generating the application name is made more flexible with this commit, so as it now generates no data for %u and %d if MyProcPort is missing, and a simple "unknown" if MyProcPort exists, but the expected fields are not set. Reported-by: Alexander Lakhin Author: Kyotaro Horiguchi, Michael Paquier Reviewed-by: Hayato Kuroda, Masahiko Sawada Discussion: https://postgr.es/m/17789-8b31c5a4672b74d9@postgresql.org Backpatch-through: 15
This commit is contained in:
parent
038f586d5f
commit
8427ce4c37
@ -485,8 +485,6 @@ process_pgfdw_appname(const char *appname)
|
||||
const char *p;
|
||||
StringInfoData buf;
|
||||
|
||||
Assert(MyProcPort != NULL);
|
||||
|
||||
initStringInfo(&buf);
|
||||
|
||||
for (p = appname; *p != '\0'; p++)
|
||||
@ -522,13 +520,29 @@ process_pgfdw_appname(const char *appname)
|
||||
appendStringInfoString(&buf, cluster_name);
|
||||
break;
|
||||
case 'd':
|
||||
appendStringInfoString(&buf, MyProcPort->database_name);
|
||||
if (MyProcPort)
|
||||
{
|
||||
const char *dbname = MyProcPort->database_name;
|
||||
|
||||
if (dbname)
|
||||
appendStringInfoString(&buf, dbname);
|
||||
else
|
||||
appendStringInfoString(&buf, "[unknown]");
|
||||
}
|
||||
break;
|
||||
case 'p':
|
||||
appendStringInfo(&buf, "%d", MyProcPid);
|
||||
break;
|
||||
case 'u':
|
||||
appendStringInfoString(&buf, MyProcPort->user_name);
|
||||
if (MyProcPort)
|
||||
{
|
||||
const char *username = MyProcPort->user_name;
|
||||
|
||||
if (username)
|
||||
appendStringInfoString(&buf, username);
|
||||
else
|
||||
appendStringInfoString(&buf, "[unknown]");
|
||||
}
|
||||
break;
|
||||
default:
|
||||
/* format error - ignore it */
|
||||
|
Loading…
Reference in New Issue
Block a user