summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane2022-08-27 16:52:39 +0000
committerTom Lane2022-08-27 16:52:39 +0000
commit94077df1c2def788f888a27ed0035236f806466d (patch)
tree30e00e35400832507c97da17cdf28da014df2d81
parentd1ce745db2d7db193c0be461db3cd34edd776dac (diff)
Avoid casting away const in sepgsql's quote_object_name.
quote_identifier's API is designed on the assumption that it's not worth worrying about a short-term memory leak when we have to produce a quoted version of the given identifier. Whoever wrote quote_object_name took it on themselves to override that judgment, but the only way to do so is to cast away const someplace. We can avoid that and substantially shorten the function by going along with quote_identifier's opinion. AFAICS quote_object_name is not used in any way where this would be unsustainable. Per discussion of commit 45987aae2, which exposed that we had a casting-away-const situation here. Discussion: https://postgr.es/m/[email protected]
-rw-r--r--contrib/sepgsql/label.c33
1 files changed, 6 insertions, 27 deletions
diff --git a/contrib/sepgsql/label.c b/contrib/sepgsql/label.c
index 6e7c0d7cff..440d9f0d50 100644
--- a/contrib/sepgsql/label.c
+++ b/contrib/sepgsql/label.c
@@ -646,45 +646,24 @@ sepgsql_mcstrans_out(PG_FUNCTION_ARGS)
/*
* quote_object_name
*
- * It tries to quote the supplied identifiers
+ * Concatenate as many of the given strings as aren't NULL, with dots between.
+ * Quote any of the strings that wouldn't be valid identifiers otherwise.
*/
static char *
quote_object_name(const char *src1, const char *src2,
const char *src3, const char *src4)
{
StringInfoData result;
- const char *temp;
initStringInfo(&result);
-
if (src1)
- {
- temp = quote_identifier(src1);
- appendStringInfoString(&result, temp);
- if (src1 != temp)
- pfree(temp);
- }
+ appendStringInfoString(&result, quote_identifier(src1));
if (src2)
- {
- temp = quote_identifier(src2);
- appendStringInfo(&result, ".%s", temp);
- if (src2 != temp)
- pfree(temp);
- }
+ appendStringInfo(&result, ".%s", quote_identifier(src2));
if (src3)
- {
- temp = quote_identifier(src3);
- appendStringInfo(&result, ".%s", temp);
- if (src3 != temp)
- pfree(temp);
- }
+ appendStringInfo(&result, ".%s", quote_identifier(src3));
if (src4)
- {
- temp = quote_identifier(src4);
- appendStringInfo(&result, ".%s", temp);
- if (src4 != temp)
- pfree(temp);
- }
+ appendStringInfo(&result, ".%s", quote_identifier(src4));
return result.data;
}