summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/pgsql/pgsql.c24
1 files changed, 10 insertions, 14 deletions
diff --git a/ext/pgsql/pgsql.c b/ext/pgsql/pgsql.c
index 225e3e4b37..7171f332da 100644
--- a/ext/pgsql/pgsql.c
+++ b/ext/pgsql/pgsql.c
@@ -2376,17 +2376,15 @@ PHP_FUNCTION(pg_copy_from)
PHP_FUNCTION(pg_escape_string)
{
char *from = NULL, *to = NULL;
- int len;
+ size_t from_len, to_len;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s",
- &from, &len) == FAILURE) {
+ &from, &from_len) == FAILURE) {
return;
}
- len = (int)PQescapeString(to, from, strlen(from));
- if (len < 0) {
- RETURN_FALSE;
- }
- RETURN_STRINGL(to, len, 0);
+ to = (char *)emalloc(from_len*2+1);
+ to_len = (int)PQescapeString(to, from, from_len);
+ RETURN_STRINGL(to, to_len, 0);
}
/* }}} */
@@ -2395,17 +2393,15 @@ PHP_FUNCTION(pg_escape_string)
PHP_FUNCTION(pg_escape_bytea)
{
char *from = NULL, *to = NULL;
- int len;
+ size_t from_len, to_len;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s",
- &from, &len) == FAILURE) {
+ &from, &from_len) == FAILURE) {
return;
}
- to = (char *)PQescapeBytea((unsigned char*)from, strlen(from), (size_t *)&len);
- if (len < 0) {
- RETURN_FALSE;
- }
- RETURN_STRINGL(to, len, 0);
+ to = (char *)PQescapeBytea((unsigned char*)from, from_len, &to_len);
+ RETVAL_STRINGL(to, to_len-1, 1);
+ free(to);
}
/* }}} */
#endif