Revert "Don't truncate database and user names in startup packets."
authorNathan Bossart <[email protected]>
Thu, 12 Dec 2024 21:52:04 +0000 (15:52 -0600)
committerNathan Bossart <[email protected]>
Thu, 12 Dec 2024 21:52:04 +0000 (15:52 -0600)
This reverts commit 562bee0fc13dc95710b8db6a48edad2f3d052f2e.

We received a report from the field about this change in behavior,
so it seems best to revert this commit and to add proper
multibyte-aware truncation as a follow-up exercise.

Fixes bug #18711.

Reported-by: Adam Rauch
Reviewed-by: Tom Lane, Bertrand Drouvot, Bruce Momjian, Thomas Munro
Discussion: https://postgr.es/m/18711-7503ee3e449d2c47%40postgresql.org
Back-through: 17

src/backend/tcop/backend_startup.c

index 2a96c81f925339b71e336150433253c5b74415f4..5e9ad30aebc3527fcab78d2869a6f560aefdaed8 100644 (file)
@@ -830,6 +830,15 @@ ProcessStartupPacket(Port *port, bool ssl_done, bool gss_done)
    if (port->database_name == NULL || port->database_name[0] == '\0')
        port->database_name = pstrdup(port->user_name);
 
+   /*
+    * Truncate given database and user names to length of a Postgres name.
+    * This avoids lookup failures when overlength names are given.
+    */
+   if (strlen(port->database_name) >= NAMEDATALEN)
+       port->database_name[NAMEDATALEN - 1] = '\0';
+   if (strlen(port->user_name) >= NAMEDATALEN)
+       port->user_name[NAMEDATALEN - 1] = '\0';
+
    if (am_walsender)
        MyBackendType = B_WAL_SENDER;
    else