aboutsummaryrefslogtreecommitdiff
path: root/src/interfaces/ecpg/ecpglib/execute.c
diff options
context:
space:
mode:
authorMichael Meskes <meskes@postgresql.org>2007-02-27 13:26:59 +0000
committerMichael Meskes <meskes@postgresql.org>2007-02-27 13:26:59 +0000
commit278ed7c6ce8852f77d90c4df76e7913eaba64d02 (patch)
tree353f042feffe242b75beea3d6efbed76c4f65f87 /src/interfaces/ecpg/ecpglib/execute.c
parent34f92d2c7786100dd0646bda6fd4ae50f2d37428 (diff)
downloadpostgresql-278ed7c6ce8852f77d90c4df76e7913eaba64d02.tar.gz
postgresql-278ed7c6ce8852f77d90c4df76e7913eaba64d02.zip
Backported bug fix for #2956.
Diffstat (limited to 'src/interfaces/ecpg/ecpglib/execute.c')
-rw-r--r--src/interfaces/ecpg/ecpglib/execute.c41
1 files changed, 20 insertions, 21 deletions
diff --git a/src/interfaces/ecpg/ecpglib/execute.c b/src/interfaces/ecpg/ecpglib/execute.c
index 4f70f7eda03..a08afafadd7 100644
--- a/src/interfaces/ecpg/ecpglib/execute.c
+++ b/src/interfaces/ecpg/ecpglib/execute.c
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/execute.c,v 1.38.4.11 2007/02/06 09:42:08 meskes Exp $ */
+/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/execute.c,v 1.38.4.12 2007/02/27 13:26:59 meskes Exp $ */
/*
* The aim is to get a simpler inteface to the database routines.
@@ -38,33 +38,32 @@
static char *
quote_postgres(char *arg, int lineno)
{
- char *res = (char *) ECPGalloc(2 * strlen(arg) + 3, lineno);
- int i,
- ri = 0;
+ char *res;
+ int error;
+ size_t length;
+ size_t escaped_len;
+ size_t buffer_len;
+ /*
+ * if quote is false we just need to store things in a descriptor they
+ * will be quoted once they are inserted in a statement
+ */
+ length = strlen(arg);
+ buffer_len = 2 * length + 1;
+ res = (char *) ECPGalloc(buffer_len + 2, lineno);
if (!res)
return (res);
- res[ri++] = '\'';
-
- for (i = 0; arg[i]; i++, ri++)
+ error = 0;
+ escaped_len = PQescapeString(res+1, arg, buffer_len);
+ if (error)
{
- switch (arg[i])
- {
- case '\'':
- res[ri++] = '\'';
- break;
- case '\\':
- res[ri++] = '\\';
- break;
- default:
- ;
- }
- res[ri] = arg[i];
+ ECPGfree(res);
+ return NULL;
}
- res[ri++] = '\'';
- res[ri] = '\0';
+ res[0] = res[escaped_len+1] = '\'';
+ res[escaped_len+2] = '\0';
ECPGfree(arg);
return res;