Avoid using atooid for numerical comparisons which arent Oids
authorDaniel Gustafsson <dgustafsson@postgresql.org>
Tue, 21 Mar 2023 11:57:21 +0000 (12:57 +0100)
committerDaniel Gustafsson <dgustafsson@postgresql.org>
Tue, 21 Mar 2023 11:57:21 +0000 (12:57 +0100)
The check for the number of roles in the target cluster for an upgrade
selects the existing roles and performs a COUNT(*) over the result.  A
value of one is the expected query result value indicating that only
the install user is present in the new cluster. The result was converted
with the function for converting a string containing an Oid into a numeric,
which avoids potential overflow but makes the code less readable since
it's not actually an Oid at all.

Discussion: https://postgr.es/m/41AB5F1F-4389-4B25-9668-5C430375836C@yesql.se

src/bin/pg_upgrade/check.c

index b71b00be379c2768f6a1ae3a7a8df59bdc2fa485..fea159689e148326f3ff9cedcecd7f24dd76f71b 100644 (file)
@@ -568,7 +568,7 @@ check_is_install_user(ClusterInfo *cluster)
         * users might match users defined in the old cluster and generate an
         * error during pg_dump restore.
         */
-       if (cluster == &new_cluster && atooid(PQgetvalue(res, 0, 0)) != 1)
+       if (cluster == &new_cluster && strcmp(PQgetvalue(res, 0, 0), "1") != 0)
                pg_fatal("Only the install user can be defined in the new cluster.");
 
        PQclear(res);