diff options
author | Wez Furlong <wez@php.net> | 2005-11-16 06:32:33 +0000 |
---|---|---|
committer | Wez Furlong <wez@php.net> | 2005-11-16 06:32:33 +0000 |
commit | 0bd9518f8c05aab62c70cea2995d8b34c4b94bb5 (patch) | |
tree | 4138e885df400fad667f0b90b4978abc49ac3184 | |
parent | c95360658fcf92a388cac3c7c20a48a488a2c791 (diff) | |
download | php-git-0bd9518f8c05aab62c70cea2995d8b34c4b94bb5.tar.gz |
Closes PECL #5944; binding an invalid parameter can lead to segfaults.
Modified patch provided by curt@php.net.
-rwxr-xr-x | ext/pdo/pdo_stmt.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/ext/pdo/pdo_stmt.c b/ext/pdo/pdo_stmt.c index 68eec666d5..7daa189dab 100755 --- a/ext/pdo/pdo_stmt.c +++ b/ext/pdo/pdo_stmt.c @@ -328,7 +328,17 @@ static int really_register_bound_param(struct pdo_bound_param_data *param, pdo_s /* tell the driver we just created a parameter */ if (stmt->methods->param_hook) { - return stmt->methods->param_hook(stmt, pparam, PDO_PARAM_EVT_ALLOC TSRMLS_CC); + if (!stmt->methods->param_hook(stmt, pparam, + PDO_PARAM_EVT_ALLOC TSRMLS_CC)) { + /* driver indicates that the parameter doesn't exist. + * remove it from our hash */ + if (pparam->name) { + zend_hash_del(hash, pparam->name, pparam->namelen); + } else { + zend_hash_index_del(hash, pparam->paramno); + } + return 0; + } } return 1; |