From 1b677e7e34aefd11031e204a3c31aefa93ee944c Mon Sep 17 00:00:00 2001
From: "Vadim B. Mikheev" <vadim4o@yahoo.com>
Date: Thu, 2 Oct 1997 13:52:29 +0000
Subject: [PATCH] Fix \ handling

---
 src/backend/commands/trigger.c | 21 +++++++++++++++++++--
 1 file changed, 19 insertions(+), 2 deletions(-)

diff --git a/src/backend/commands/trigger.c b/src/backend/commands/trigger.c
index c3116ca8829..9215f410555 100644
--- a/src/backend/commands/trigger.c
+++ b/src/backend/commands/trigger.c
@@ -159,14 +159,31 @@ CreateTrigger(CreateTrigStmt * stmt)
 
 		foreach(le, stmt->args)
 		{
-			char	   *ar = (char *) lfirst(le);
+			char   *ar = (char *) lfirst(le);
 
 			len += strlen(ar) + 4;
+			for ( ; *ar; ar++)
+			{
+				if (*ar == '\\')
+					len++;
+			}
 		}
 		args = (char *) palloc(len + 1);
 		args[0] = 0;
 		foreach(le, stmt->args)
-			sprintf(args + strlen(args), "%s\\000", (char *) lfirst(le));
+		{
+			char   *s = (char *) lfirst(le);
+			char   *d = args + strlen(args);
+			
+			while (*s)
+			{
+				if (*s == '\\')
+					*d++ = '\\';
+				*d++ = *s++;
+			}
+			*d = 0;
+			strcat(args, "\\000");
+		}
 		values[Anum_pg_trigger_tgnargs - 1] = Int16GetDatum(nargs);
 		values[Anum_pg_trigger_tgargs - 1] = PointerGetDatum(byteain(args));
 	}
-- 
GitLab