From 0bd9518f8c05aab62c70cea2995d8b34c4b94bb5 Mon Sep 17 00:00:00 2001 From: Wez Furlong Date: Wed, 16 Nov 2005 06:32:33 +0000 Subject: [PATCH] Closes PECL #5944; binding an invalid parameter can lead to segfaults. Modified patch provided by curt@php.net. --- ext/pdo/pdo_stmt.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/ext/pdo/pdo_stmt.c b/ext/pdo/pdo_stmt.c index 68eec666d59..7daa189dab3 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;