]> granicus.if.org Git - php/commitdiff
Reworked Fix bug #52098
authorJulien Pauli <jpauli@php.net>
Mon, 21 Mar 2016 14:23:18 +0000 (15:23 +0100)
committerJulien Pauli <jpauli@php.net>
Mon, 21 Mar 2016 14:23:18 +0000 (15:23 +0100)
ext/pdo/pdo_stmt.c

index db295ee43083143ffee051876923b3b8549fdd9a..a2ae2fdf3a39e739a2fe3270694a5d662fba1551 100644 (file)
@@ -2240,14 +2240,11 @@ static void dbstmt_prop_delete(zval *object, zval *member, const zend_literal *k
        }
 }
 
-static union _zend_function *dbstmt_method_get(
-       zval **object_pp,
-       char *method_name, int method_len, const zend_literal *key TSRMLS_DC)
+static union _zend_function *dbstmt_method_get(zval **object_pp, char *method_name, int method_len, const zend_literal *key TSRMLS_DC)
 {
        zend_function *fbc = NULL;
        char *lc_method_name;
        zval *object = *object_pp;
-       zend_function *fbc_fallback = NULL;
 
        lc_method_name = emalloc(method_len + 1);
        zend_str_tolower_copy(lc_method_name, method_name, method_len);
@@ -2255,14 +2252,9 @@ static union _zend_function *dbstmt_method_get(
        if (zend_hash_find(&Z_OBJCE_P(object)->function_table, lc_method_name,
                        method_len+1, (void**)&fbc) == FAILURE) {
 
-               /* Prepare fallback by running standard method for functions.
-                * If the function does not find a method to instanciate it will return this fallback method. */
-               fbc_fallback = std_object_handlers.get_method(object_pp, method_name, method_len, key TSRMLS_CC);
-
                pdo_stmt_t *stmt = (pdo_stmt_t*)zend_object_store_get_object(object TSRMLS_CC);
                /* instance not created by PDO object */
                if (!stmt->dbh) {
-                       fbc = fbc_fallback;
                        goto out;
                }
                /* not a pre-defined method, nor a user-defined method; check
@@ -2271,22 +2263,21 @@ static union _zend_function *dbstmt_method_get(
                        if (!pdo_hash_methods(stmt->dbh,
                                PDO_DBH_DRIVER_METHOD_KIND_STMT TSRMLS_CC)
                                || !stmt->dbh->cls_methods[PDO_DBH_DRIVER_METHOD_KIND_STMT]) {
-
-                               fbc = fbc_fallback;
                                goto out;
                        }
                }
 
                if (zend_hash_find(stmt->dbh->cls_methods[PDO_DBH_DRIVER_METHOD_KIND_STMT],
                                lc_method_name, method_len+1, (void**)&fbc) == FAILURE) {
-
-                       fbc = fbc_fallback;
                        goto out;
                }
                /* got it */
        }
 
 out:
+       if (!fbc) {
+               fbc = std_object_handlers.get_method(object_pp, method_name, method_len, key TSRMLS_CC);
+       }
        efree(lc_method_name);
        return fbc;
 }