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

Reply via email to