Hi, The function quote_identifier has extra post-increment operation as highlighted below,
char * quote_identifier(const char *s) { char *result = pg_malloc(strlen(s) * 2 + 3); char *r = result; *r++ = '"'; while (*s) { if (*s == '"') *r++ = *s; *r++ = *s; s++; } *r++ = '"'; **r++ = '\0';* return result; } I think *r = '\0' is enough here. Per precedence table the precedence of postfix increment operator is higher. The above statement increments 'r' pointer address but returns the original un-incremented pointer address, which is then dereferenced. Correct me if I am wrong here. If my understanding is correct then '++' is not needed in the above highlighted statement which is leading to overhead. Find an attached patch which does the same. This can be backported till v96. Thanks & Regards, Vaibhav Dalvi [image: image.png]
diff --git a/src/bin/pg_upgrade/util.c b/src/bin/pg_upgrade/util.c index fc20472..dc000d0 100644 --- a/src/bin/pg_upgrade/util.c +++ b/src/bin/pg_upgrade/util.c @@ -198,7 +198,7 @@ quote_identifier(const char *s) s++; } *r++ = '"'; - *r++ = '\0'; + *r = '\0'; return result; }