OSDN Git Service

Fix \ handling
authorVadim B. Mikheev <vadim4o@yahoo.com>
Thu, 2 Oct 1997 13:52:29 +0000 (13:52 +0000)
committerVadim B. Mikheev <vadim4o@yahoo.com>
Thu, 2 Oct 1997 13:52:29 +0000 (13:52 +0000)
src/backend/commands/trigger.c

index c3116ca..9215f41 100644 (file)
@@ -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));
        }