Browse Source

Fixed bug #43703 (Signature compatibility check broken)

PECL
Dmitry Stogov 19 years ago
parent
commit
b5c4244069
  1. 23
      Zend/tests/bug43703.phpt
  2. 4
      Zend/zend_compile.c

23
Zend/tests/bug43703.phpt

@ -0,0 +1,23 @@
--TEST--
Bug #43703 (Signature compatibility check broken)
--FILE--
<?php
class JoinPoint
{
}
abstract class Pointcut
{
abstract public function evaluate(JoinPoint $joinPoint);
}
class Read extends Pointcut
{
public function evaluate(Joinpoint $joinPoint)
{
}
}
?>
DONE
--EXPECT--
DONE

4
Zend/zend_compile.c

@ -2293,13 +2293,13 @@ static zend_bool zend_do_perform_implementation_check(zend_function *fe, zend_fu
return 0;
}
if (fe->common.arg_info[i].class_name
&& strcmp(fe->common.arg_info[i].class_name, proto->common.arg_info[i].class_name)!=0) {
&& strcasecmp(fe->common.arg_info[i].class_name, proto->common.arg_info[i].class_name)!=0) {
char *colon;
if (fe->common.type == ZEND_USER_FUNCTION &&
strchr(proto->common.arg_info[i].class_name, ':') == NULL &&
(colon = zend_memrchr(fe->common.arg_info[i].class_name, ':', fe->common.arg_info[i].class_name_len)) != NULL &&
strcmp(colon+1, proto->common.arg_info[i].class_name) == 0) {
strcasecmp(colon+1, proto->common.arg_info[i].class_name) == 0) {
efree((char*)fe->common.arg_info[i].class_name);
fe->common.arg_info[i].class_name = estrndup(proto->common.arg_info[i].class_name, proto->common.arg_info[i].class_name_len);
fe->common.arg_info[i].class_name_len = proto->common.arg_info[i].class_name_len;

Loading…
Cancel
Save