diff options
-rw-r--r-- | ext/pgsql/pgsql.c | 24 |
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 |