1
0
mirror of https://github.com/php/php-src.git synced 2026-03-26 09:12:14 +01:00

Fixed namespace name and internal class name ambiguity

This commit is contained in:
Dmitry Stogov
2007-08-01 11:44:25 +00:00
parent 467b4569df
commit d4af6ba6bf
3 changed files with 114 additions and 0 deletions

15
Zend/tests/ns_038.phpt Executable file
View File

@@ -0,0 +1,15 @@
--TEST--
038: Name ambiguity (namespace name or internal class name)
--FILE--
<?php
namespace Exception;
function foo() {
echo "ok\n";
}
Exception::foo();
Exception::bar();
--EXPECTF--
ok
Fatal error: Call to undefined method Exception::bar() in %sns_038.php on line 7

View File

@@ -1849,7 +1849,16 @@ ZEND_VM_HANDLER(113, ZEND_INIT_STATIC_METHOD_CALL, CONST|VAR, CONST|TMP|VAR|UNUS
}
}
if (opline->extended_value & ZEND_FETCH_CLASS_RT_NS_CHECK) {
lcname_len -= Z_UNILEN(opline->op2.u.constant) + 2;
if (UG(unicode)) {
ns.u[lcname_len] = 0;
} else {
ns.s[lcname_len] = 0;
}
ce = zend_u_fetch_class(Z_TYPE(opline->op1.u.constant), ns, lcname_len, opline->extended_value & ~ZEND_FETCH_CLASS_RT_NS_CHECK TSRMLS_CC);
if (!ce) {
zend_error(E_ERROR, "Class '%R' not found", Z_TYPE(opline->op1.u.constant), Z_UNIVAL(opline->op1.u.constant));
}
} else {
zend_error(E_ERROR, "Class '%R' not found", Z_TYPE(opline->op1.u.constant), Z_UNIVAL(opline->op1.u.constant));
}

View File

@@ -2601,7 +2601,16 @@ static int ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HAN
}
}
if (opline->extended_value & ZEND_FETCH_CLASS_RT_NS_CHECK) {
lcname_len -= Z_UNILEN(opline->op2.u.constant) + 2;
if (UG(unicode)) {
ns.u[lcname_len] = 0;
} else {
ns.s[lcname_len] = 0;
}
ce = zend_u_fetch_class(Z_TYPE(opline->op1.u.constant), ns, lcname_len, opline->extended_value & ~ZEND_FETCH_CLASS_RT_NS_CHECK TSRMLS_CC);
if (!ce) {
zend_error(E_ERROR, "Class '%R' not found", Z_TYPE(opline->op1.u.constant), Z_UNIVAL(opline->op1.u.constant));
}
} else {
zend_error(E_ERROR, "Class '%R' not found", Z_TYPE(opline->op1.u.constant), Z_UNIVAL(opline->op1.u.constant));
}
@@ -3097,7 +3106,16 @@ static int ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDL
}
}
if (opline->extended_value & ZEND_FETCH_CLASS_RT_NS_CHECK) {
lcname_len -= Z_UNILEN(opline->op2.u.constant) + 2;
if (UG(unicode)) {
ns.u[lcname_len] = 0;
} else {
ns.s[lcname_len] = 0;
}
ce = zend_u_fetch_class(Z_TYPE(opline->op1.u.constant), ns, lcname_len, opline->extended_value & ~ZEND_FETCH_CLASS_RT_NS_CHECK TSRMLS_CC);
if (!ce) {
zend_error(E_ERROR, "Class '%R' not found", Z_TYPE(opline->op1.u.constant), Z_UNIVAL(opline->op1.u.constant));
}
} else {
zend_error(E_ERROR, "Class '%R' not found", Z_TYPE(opline->op1.u.constant), Z_UNIVAL(opline->op1.u.constant));
}
@@ -3594,7 +3612,16 @@ static int ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDL
}
}
if (opline->extended_value & ZEND_FETCH_CLASS_RT_NS_CHECK) {
lcname_len -= Z_UNILEN(opline->op2.u.constant) + 2;
if (UG(unicode)) {
ns.u[lcname_len] = 0;
} else {
ns.s[lcname_len] = 0;
}
ce = zend_u_fetch_class(Z_TYPE(opline->op1.u.constant), ns, lcname_len, opline->extended_value & ~ZEND_FETCH_CLASS_RT_NS_CHECK TSRMLS_CC);
if (!ce) {
zend_error(E_ERROR, "Class '%R' not found", Z_TYPE(opline->op1.u.constant), Z_UNIVAL(opline->op1.u.constant));
}
} else {
zend_error(E_ERROR, "Class '%R' not found", Z_TYPE(opline->op1.u.constant), Z_UNIVAL(opline->op1.u.constant));
}
@@ -3857,7 +3884,16 @@ static int ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HA
}
}
if (opline->extended_value & ZEND_FETCH_CLASS_RT_NS_CHECK) {
lcname_len -= Z_UNILEN(opline->op2.u.constant) + 2;
if (UG(unicode)) {
ns.u[lcname_len] = 0;
} else {
ns.s[lcname_len] = 0;
}
ce = zend_u_fetch_class(Z_TYPE(opline->op1.u.constant), ns, lcname_len, opline->extended_value & ~ZEND_FETCH_CLASS_RT_NS_CHECK TSRMLS_CC);
if (!ce) {
zend_error(E_ERROR, "Class '%R' not found", Z_TYPE(opline->op1.u.constant), Z_UNIVAL(opline->op1.u.constant));
}
} else {
zend_error(E_ERROR, "Class '%R' not found", Z_TYPE(opline->op1.u.constant), Z_UNIVAL(opline->op1.u.constant));
}
@@ -4322,7 +4358,16 @@ static int ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLE
}
}
if (opline->extended_value & ZEND_FETCH_CLASS_RT_NS_CHECK) {
lcname_len -= Z_UNILEN(opline->op2.u.constant) + 2;
if (UG(unicode)) {
ns.u[lcname_len] = 0;
} else {
ns.s[lcname_len] = 0;
}
ce = zend_u_fetch_class(Z_TYPE(opline->op1.u.constant), ns, lcname_len, opline->extended_value & ~ZEND_FETCH_CLASS_RT_NS_CHECK TSRMLS_CC);
if (!ce) {
zend_error(E_ERROR, "Class '%R' not found", Z_TYPE(opline->op1.u.constant), Z_UNIVAL(opline->op1.u.constant));
}
} else {
zend_error(E_ERROR, "Class '%R' not found", Z_TYPE(opline->op1.u.constant), Z_UNIVAL(opline->op1.u.constant));
}
@@ -10219,7 +10264,16 @@ static int ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDL
}
}
if (opline->extended_value & ZEND_FETCH_CLASS_RT_NS_CHECK) {
lcname_len -= Z_UNILEN(opline->op2.u.constant) + 2;
if (UG(unicode)) {
ns.u[lcname_len] = 0;
} else {
ns.s[lcname_len] = 0;
}
ce = zend_u_fetch_class(Z_TYPE(opline->op1.u.constant), ns, lcname_len, opline->extended_value & ~ZEND_FETCH_CLASS_RT_NS_CHECK TSRMLS_CC);
if (!ce) {
zend_error(E_ERROR, "Class '%R' not found", Z_TYPE(opline->op1.u.constant), Z_UNIVAL(opline->op1.u.constant));
}
} else {
zend_error(E_ERROR, "Class '%R' not found", Z_TYPE(opline->op1.u.constant), Z_UNIVAL(opline->op1.u.constant));
}
@@ -11947,7 +12001,16 @@ static int ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER
}
}
if (opline->extended_value & ZEND_FETCH_CLASS_RT_NS_CHECK) {
lcname_len -= Z_UNILEN(opline->op2.u.constant) + 2;
if (UG(unicode)) {
ns.u[lcname_len] = 0;
} else {
ns.s[lcname_len] = 0;
}
ce = zend_u_fetch_class(Z_TYPE(opline->op1.u.constant), ns, lcname_len, opline->extended_value & ~ZEND_FETCH_CLASS_RT_NS_CHECK TSRMLS_CC);
if (!ce) {
zend_error(E_ERROR, "Class '%R' not found", Z_TYPE(opline->op1.u.constant), Z_UNIVAL(opline->op1.u.constant));
}
} else {
zend_error(E_ERROR, "Class '%R' not found", Z_TYPE(opline->op1.u.constant), Z_UNIVAL(opline->op1.u.constant));
}
@@ -13667,7 +13730,16 @@ static int ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER
}
}
if (opline->extended_value & ZEND_FETCH_CLASS_RT_NS_CHECK) {
lcname_len -= Z_UNILEN(opline->op2.u.constant) + 2;
if (UG(unicode)) {
ns.u[lcname_len] = 0;
} else {
ns.s[lcname_len] = 0;
}
ce = zend_u_fetch_class(Z_TYPE(opline->op1.u.constant), ns, lcname_len, opline->extended_value & ~ZEND_FETCH_CLASS_RT_NS_CHECK TSRMLS_CC);
if (!ce) {
zend_error(E_ERROR, "Class '%R' not found", Z_TYPE(opline->op1.u.constant), Z_UNIVAL(opline->op1.u.constant));
}
} else {
zend_error(E_ERROR, "Class '%R' not found", Z_TYPE(opline->op1.u.constant), Z_UNIVAL(opline->op1.u.constant));
}
@@ -14585,7 +14657,16 @@ static int ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HAND
}
}
if (opline->extended_value & ZEND_FETCH_CLASS_RT_NS_CHECK) {
lcname_len -= Z_UNILEN(opline->op2.u.constant) + 2;
if (UG(unicode)) {
ns.u[lcname_len] = 0;
} else {
ns.s[lcname_len] = 0;
}
ce = zend_u_fetch_class(Z_TYPE(opline->op1.u.constant), ns, lcname_len, opline->extended_value & ~ZEND_FETCH_CLASS_RT_NS_CHECK TSRMLS_CC);
if (!ce) {
zend_error(E_ERROR, "Class '%R' not found", Z_TYPE(opline->op1.u.constant), Z_UNIVAL(opline->op1.u.constant));
}
} else {
zend_error(E_ERROR, "Class '%R' not found", Z_TYPE(opline->op1.u.constant), Z_UNIVAL(opline->op1.u.constant));
}
@@ -15955,7 +16036,16 @@ static int ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_
}
}
if (opline->extended_value & ZEND_FETCH_CLASS_RT_NS_CHECK) {
lcname_len -= Z_UNILEN(opline->op2.u.constant) + 2;
if (UG(unicode)) {
ns.u[lcname_len] = 0;
} else {
ns.s[lcname_len] = 0;
}
ce = zend_u_fetch_class(Z_TYPE(opline->op1.u.constant), ns, lcname_len, opline->extended_value & ~ZEND_FETCH_CLASS_RT_NS_CHECK TSRMLS_CC);
if (!ce) {
zend_error(E_ERROR, "Class '%R' not found", Z_TYPE(opline->op1.u.constant), Z_UNIVAL(opline->op1.u.constant));
}
} else {
zend_error(E_ERROR, "Class '%R' not found", Z_TYPE(opline->op1.u.constant), Z_UNIVAL(opline->op1.u.constant));
}