summaryrefslogtreecommitdiff
path: root/ext/pgsql
diff options
context:
space:
mode:
authorDerick Rethans <derick@php.net>2005-07-05 12:45:39 +0000
committerDerick Rethans <derick@php.net>2005-07-05 12:45:39 +0000
commit17b877a77242dfcfc6436340b8a9d804a60bf2c7 (patch)
treeecb23d27f6a8ba03da95846aee815770ed7aa45a /ext/pgsql
parentd9248ab10eea50698d6aa36316f177c9f9db2d5e (diff)
downloadphp-git-17b877a77242dfcfc6436340b8a9d804a60bf2c7.tar.gz
- Fixed memory corruption in pg_copy_from() in case the as_null parameter was
passed. (Derick)
Diffstat (limited to 'ext/pgsql')
-rw-r--r--ext/pgsql/pgsql.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/ext/pgsql/pgsql.c b/ext/pgsql/pgsql.c
index 2fa3657b25..ec863185e8 100644
--- a/ext/pgsql/pgsql.c
+++ b/ext/pgsql/pgsql.c
@@ -3280,6 +3280,7 @@ PHP_FUNCTION(pg_copy_from)
zval **tmp;
char *table_name, *pg_delim = NULL, *pg_null_as = NULL;
int table_name_len, pg_delim_len, pg_null_as_len;
+ int pg_null_as_free = 0;
char *query;
char *query_template = "COPY \"\" FROM STDIN DELIMITERS ':' WITH NULL AS ''";
HashPosition pos;
@@ -3299,6 +3300,7 @@ PHP_FUNCTION(pg_copy_from)
}
if (!pg_null_as) {
pg_null_as = safe_estrdup("\\\\N");
+ pg_null_as_free = 1;
}
ZEND_FETCH_RESOURCE2(pgsql, PGconn *, &pgsql_link, id, "PostgreSQL link", le_link, le_plink);
@@ -3311,7 +3313,9 @@ PHP_FUNCTION(pg_copy_from)
}
pgsql_result = PQexec(pgsql, query);
- efree(pg_null_as);
+ if (pg_null_as_free) {
+ efree(pg_null_as);
+ }
efree(query);
if (pgsql_result) {