mirror of
https://github.com/php/php-src.git
synced 2024-09-27 04:47:22 +00:00
- Fixed bug #47769 (Strange extends PDO)
This commit is contained in:
parent
3b8a7eaff8
commit
35ddc72b28
@ -1342,8 +1342,7 @@ static union _zend_function *dbh_method_get(
|
||||
|
||||
lc_method_name = zend_u_str_tolower_dup(ztype, method_name, method_len);
|
||||
|
||||
if (zend_u_hash_find(&dbh->ce->function_table, ztype, lc_method_name,
|
||||
method_len+1, (void**)&fbc) == FAILURE) {
|
||||
if ((fbc = std_object_handlers.get_method(object_pp, method_name, method_len TSRMLS_CC)) == NULL) {
|
||||
/* not a pre-defined method, nor a user-defined method; check
|
||||
* the driver specific methods */
|
||||
if (!dbh->cls_methods[PDO_DBH_DRIVER_METHOD_KIND_DBH]) {
|
||||
@ -1356,20 +1355,13 @@ static union _zend_function *dbh_method_get(
|
||||
|
||||
if (zend_u_hash_find(dbh->cls_methods[PDO_DBH_DRIVER_METHOD_KIND_DBH],
|
||||
ztype, lc_method_name, method_len+1, (void**)&fbc) == FAILURE) {
|
||||
|
||||
if (!fbc) {
|
||||
fbc = NULL;
|
||||
}
|
||||
goto out;
|
||||
}
|
||||
/* got it */
|
||||
}
|
||||
|
||||
out:
|
||||
if (!fbc && std_object_handlers.get_method) {
|
||||
fbc = std_object_handlers.get_method(object_pp, method_name, method_len TSRMLS_CC);
|
||||
}
|
||||
|
||||
pdo_zstr_efree(lc_method_name);
|
||||
return fbc;
|
||||
}
|
||||
|
32
ext/pdo/tests/bug47769.phpt
Normal file
32
ext/pdo/tests/bug47769.phpt
Normal file
@ -0,0 +1,32 @@
|
||||
--TEST--
|
||||
Bug #47769 (Strange extends PDO)
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
class test extends PDO
|
||||
{
|
||||
protected function isProtected() {
|
||||
echo "this is a protected method.\n";
|
||||
}
|
||||
private function isPrivate() {
|
||||
echo "this is a private method.\n";
|
||||
}
|
||||
|
||||
public function quote($str, $paramtype = NULL) {
|
||||
$this->isProtected();
|
||||
$this->isPrivate();
|
||||
print $str ."\n";
|
||||
}
|
||||
}
|
||||
|
||||
$test = new test('sqlite:memory');
|
||||
$test->quote('foo');
|
||||
$test->isProtected();
|
||||
|
||||
?>
|
||||
--EXPECTF--
|
||||
this is a protected method.
|
||||
this is a private method.
|
||||
foo
|
||||
|
||||
Fatal error: Call to protected method test::isProtected() from context '' in %s on line %d
|
Loading…
Reference in New Issue
Block a user