]> granicus.if.org Git - php/commitdiff
Merge branch 'PHP-7.3'
authorChristoph M. Becker <cmbecker69@gmx.de>
Sun, 16 Dec 2018 12:36:02 +0000 (13:36 +0100)
committerChristoph M. Becker <cmbecker69@gmx.de>
Sun, 16 Dec 2018 12:36:02 +0000 (13:36 +0100)
* PHP-7.3:
  Fix #77291: magic methods inherited from a trait may be ignored

1  2 
Zend/zend_inheritance.c

index 0ba108d18d65916ec5291dda1b2be54f5374955c,f3b62ef7e58bd88067c10113a9db6feec0c42baf..b116a7fbee71f7b127fb7f38834a480f73cef388
@@@ -1219,6 -1157,17 +1209,16 @@@ static void zend_add_magic_methods(zend
                ce->__tostring = fe;
        } else if (zend_string_equals_literal(mname, ZEND_DEBUGINFO_FUNC_NAME)) {
                ce->__debugInfo = fe;
 -                      fe->common.fn_flags |= ZEND_ACC_CTOR;
+       } else if (ZSTR_LEN(ce->name) == ZSTR_LEN(mname)) {
+               zend_string *lowercase_name = zend_string_tolower(ce->name);
+               lowercase_name = zend_new_interned_string(lowercase_name);
+               if (!memcmp(ZSTR_VAL(mname), ZSTR_VAL(lowercase_name), ZSTR_LEN(mname))) {
+                       if (ce->constructor  && (!ce->parent || ce->constructor != ce->parent->constructor)) {
+                               zend_error_noreturn(E_COMPILE_ERROR, "%s has colliding constructor definitions coming from traits", ZSTR_VAL(ce->name));
+                       }
+                       ce->constructor = fe;
+               }
+               zend_string_release_ex(lowercase_name, 0);
        }
  }
  /* }}} */