From: Daniel Gustafsson Date: Tue, 21 Mar 2023 11:57:21 +0000 (+0100) Subject: Avoid using atooid for numerical comparisons which arent Oids X-Git-Tag: REL_16_BETA1~478 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=106f26a849bbb760a270e9a3c586aeb73899e26a;p=thirdparty%2Fpostgresql.git Avoid using atooid for numerical comparisons which arent Oids 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 --- diff --git a/src/bin/pg_upgrade/check.c b/src/bin/pg_upgrade/check.c index b71b00be379..fea159689e1 100644 --- a/src/bin/pg_upgrade/check.c +++ b/src/bin/pg_upgrade/check.c @@ -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);