diff options
author | Antony Dovgal <tony2001@php.net> | 2007-03-07 09:02:18 +0000 |
---|---|---|
committer | Antony Dovgal <tony2001@php.net> | 2007-03-07 09:02:18 +0000 |
commit | 94723e945721b05c9d210cd254aa40347a82d2d3 (patch) | |
tree | 314ce35354bac8071521b961ce39a5fe24695524 /ext/pdo | |
parent | 0c96c5035ade7c3fc677d2c89b4e9e19d08b26c4 (diff) | |
download | php-git-94723e945721b05c9d210cd254aa40347a82d2d3.tar.gz |
fix #40727 (segfault in PDO when failed to bind parameters)
Diffstat (limited to 'ext/pdo')
-rwxr-xr-x | ext/pdo/pdo_stmt.c | 15 |
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(¶m, 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(¶m, stmt, TRUE TSRMLS_CC)) { - zval_ptr_dtor(&(param.parameter)); + if (param.parameter) { + zval_ptr_dtor(&(param.parameter)); + param.parameter = NULL; + } RETURN_FALSE; } RETURN_TRUE; |