From: Wez Furlong Date: Wed, 16 Nov 2005 06:32:33 +0000 (+0000) Subject: Closes PECL #5944; binding an invalid parameter can lead to segfaults. X-Git-Tag: php-5.1.0RC5~7 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0bd9518f8c05aab62c70cea2995d8b34c4b94bb5;p=php Closes PECL #5944; binding an invalid parameter can lead to segfaults. Modified patch provided by curt@php.net. --- 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;