summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/pdo_pgsql/pgsql_driver.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/ext/pdo_pgsql/pgsql_driver.c b/ext/pdo_pgsql/pgsql_driver.c
index af8497e721..ca83332696 100644
--- a/ext/pdo_pgsql/pgsql_driver.c
+++ b/ext/pdo_pgsql/pgsql_driver.c
@@ -33,9 +33,10 @@
#include "php_pdo_pgsql_int.h"
#include "zend_exceptions.h"
-static char * _pdo_pgsql_trim_message(const char *message)
+static char * _pdo_pgsql_trim_message(const char *message, int persistent)
{
register int i = strlen(message)-1;
+ char *tmp;
if (i>1 && (message[i-1] == '\r' || message[i-1] == '\n') && message[i] == '.') {
--i;
@@ -44,7 +45,11 @@ static char * _pdo_pgsql_trim_message(const char *message)
--i;
}
++i;
- return estrndup(message, i);
+ tmp = pemalloc(i + 1, persistent);
+ memcpy(tmp, message, i);
+ tmp[i] = '\0';
+
+ return tmp;
}
int _pdo_pgsql_error(pdo_dbh_t *dbh, pdo_stmt_t *stmt, int errcode, const char *file, int line TSRMLS_DC) /* {{{ */
@@ -59,7 +64,7 @@ int _pdo_pgsql_error(pdo_dbh_t *dbh, pdo_stmt_t *stmt, int errcode, const char *
einfo->line = line;
if (einfo->errmsg) {
- efree(einfo->errmsg);
+ pefree(einfo->errmsg, dbh->is_persistent);
einfo->errmsg = NULL;
}
@@ -74,7 +79,7 @@ int _pdo_pgsql_error(pdo_dbh_t *dbh, pdo_stmt_t *stmt, int errcode, const char *
}
if (errmsg) {
- einfo->errmsg = _pdo_pgsql_trim_message(errmsg);
+ einfo->errmsg = _pdo_pgsql_trim_message(errmsg, dbh->is_persistent);
}
if (!dbh->methods) {
@@ -109,7 +114,7 @@ static int pgsql_handle_closer(pdo_dbh_t *dbh TSRMLS_DC) /* {{{ */
H->server = NULL;
}
if (H->einfo.errmsg) {
- efree(H->einfo.errmsg);
+ pefree(H->einfo.errmsg, dbh->is_persistent);
H->einfo.errmsg = NULL;
}
pefree(H, dbh->is_persistent);