summaryrefslogtreecommitdiff
path: root/ext/pdo
diff options
context:
space:
mode:
authorAntony Dovgal <tony2001@php.net>2007-03-07 09:02:18 +0000
committerAntony Dovgal <tony2001@php.net>2007-03-07 09:02:18 +0000
commit94723e945721b05c9d210cd254aa40347a82d2d3 (patch)
tree314ce35354bac8071521b961ce39a5fe24695524 /ext/pdo
parent0c96c5035ade7c3fc677d2c89b4e9e19d08b26c4 (diff)
downloadphp-git-94723e945721b05c9d210cd254aa40347a82d2d3.tar.gz
fix #40727 (segfault in PDO when failed to bind parameters)
Diffstat (limited to 'ext/pdo')
-rwxr-xr-xext/pdo/pdo_stmt.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/ext/pdo/pdo_stmt.c b/ext/pdo/pdo_stmt.c
index a603afe8ae..1159865883 100755
--- a/ext/pdo/pdo_stmt.c
+++ b/ext/pdo/pdo_stmt.c
@@ -251,7 +251,10 @@ static void param_dtor(void *data) /* {{{ */
efree(param->name);
}
- zval_ptr_dtor(&(param->parameter));
+ if (param->parameter) {
+ zval_ptr_dtor(&(param->parameter));
+ param->parameter = NULL;
+ }
if (param->driver_params) {
zval_ptr_dtor(&(param->driver_params));
}
@@ -1556,7 +1559,10 @@ static int register_bound_param(INTERNAL_FUNCTION_PARAMETERS, pdo_stmt_t *stmt,
ZVAL_ADDREF(param.parameter);
if (!really_register_bound_param(&param, stmt, is_param TSRMLS_CC)) {
- zval_ptr_dtor(&(param.parameter));
+ if (param.parameter) {
+ zval_ptr_dtor(&(param.parameter));
+ param.parameter = NULL;
+ }
return 0;
}
return 1;
@@ -1589,7 +1595,10 @@ static PHP_METHOD(PDOStatement, bindValue)
ZVAL_ADDREF(param.parameter);
if (!really_register_bound_param(&param, stmt, TRUE TSRMLS_CC)) {
- zval_ptr_dtor(&(param.parameter));
+ if (param.parameter) {
+ zval_ptr_dtor(&(param.parameter));
+ param.parameter = NULL;
+ }
RETURN_FALSE;
}
RETURN_TRUE;