summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWez Furlong <wez@php.net>2005-11-16 06:32:33 +0000
committerWez Furlong <wez@php.net>2005-11-16 06:32:33 +0000
commit0bd9518f8c05aab62c70cea2995d8b34c4b94bb5 (patch)
tree4138e885df400fad667f0b90b4978abc49ac3184
parentc95360658fcf92a388cac3c7c20a48a488a2c791 (diff)
downloadphp-git-0bd9518f8c05aab62c70cea2995d8b34c4b94bb5.tar.gz
Closes PECL #5944; binding an invalid parameter can lead to segfaults.
Modified patch provided by curt@php.net.
-rwxr-xr-xext/pdo/pdo_stmt.c12
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;