]> granicus.if.org Git - php/commitdiff
Closes PECL #5944; binding an invalid parameter can lead to segfaults.
authorWez Furlong <wez@php.net>
Wed, 16 Nov 2005 06:32:33 +0000 (06:32 +0000)
committerWez Furlong <wez@php.net>
Wed, 16 Nov 2005 06:32:33 +0000 (06:32 +0000)
Modified patch provided by curt@php.net.

ext/pdo/pdo_stmt.c

index 68eec666d59f212c23f6b2ae6067b9b1dadabd4b..7daa189dab33812319c0f84dd7201ebdb9f84cbc 100755 (executable)
@@ -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;