summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulien Pauli <jpauli@php.net>2016-03-21 15:23:18 +0100
committerJulien Pauli <jpauli@php.net>2016-03-21 15:23:18 +0100
commitd3d64b7c62cb7b63d854b1cbc6a032c4995cdba8 (patch)
tree01871e2a238ee0a82b3f68d5f8864fe305bbeb66
parente541cd8e6bcf5a80b85379afa35e54a82c74bde2 (diff)
downloadphp-git-d3d64b7c62cb7b63d854b1cbc6a032c4995cdba8.tar.gz
Reworked Fix bug #52098
-rw-r--r--ext/pdo/pdo_stmt.c17
1 files changed, 4 insertions, 13 deletions
diff --git a/ext/pdo/pdo_stmt.c b/ext/pdo/pdo_stmt.c
index db295ee430..a2ae2fdf3a 100644
--- a/ext/pdo/pdo_stmt.c
+++ b/ext/pdo/pdo_stmt.c
@@ -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;
}