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;
}