summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPedro Magalhães <mail@pmmaga.net>2017-04-10 22:04:18 +0200
committerNikita Popov <nikita.ppv@gmail.com>2017-05-01 12:59:27 +0200
commit92124f9cdc20c6a9c22f9b54092ef945c41f2bb5 (patch)
tree87ad424570200125900fc4a9185c078128056495
parentf9215b6519d4732498e598de9a3581297c60c4e8 (diff)
downloadphp-git-92124f9cdc20c6a9c22f9b54092ef945c41f2bb5.tar.gz
Fixed bug #74269: Strict comparison of initial trait property values
-rw-r--r--NEWS2
-rw-r--r--UPGRADING2
-rw-r--r--Zend/tests/bug74269.phpt17
-rw-r--r--Zend/zend_inheritance.c14
4 files changed, 26 insertions, 9 deletions
diff --git a/NEWS b/NEWS
index a69981536a..80aa4ec8cc 100644
--- a/NEWS
+++ b/NEWS
@@ -41,6 +41,8 @@ PHP NEWS
to interned strings handling in TS builds. (Anatol, Dmitry)
. Implemented "Trailing Commas In List Syntax" RFC for group use lists only.
(Sammy Kaye Powers)
+ . Fixed bug #74269 (It's possible to override trait property with different
+ loosely-equal value). (pmmaga)
- BCMath:
. Fixed bug #46564 (bcmod truncates fractionals). (liborm85)
diff --git a/UPGRADING b/UPGRADING
index e1877667ba..78ce94cedc 100644
--- a/UPGRADING
+++ b/UPGRADING
@@ -39,6 +39,8 @@ PHP 7.2 UPGRADE NOTES
of a notice. They will generate an Error in a future version of PHP.
(https://wiki.php.net/rfc/deprecate-bareword-strings)
. Minimum supported Windows versions are Windows 7/Server 2008 R2.
+ . Initial trait property value compatibility check will no longer perform
+ any casts. (Bug #74269)
- BCMath:
. The bcmod() function no longer truncates fractional numbers to integers. As
diff --git a/Zend/tests/bug74269.phpt b/Zend/tests/bug74269.phpt
new file mode 100644
index 0000000000..53ef570fb6
--- /dev/null
+++ b/Zend/tests/bug74269.phpt
@@ -0,0 +1,17 @@
+--TEST--
+Bug #74269: It's possible to override trait property with different loosely-equal value
+--FILE--
+<?php
+trait PropertiesTrait
+{
+ public $same = true;
+}
+
+class PropertiesExample
+{
+ use PropertiesTrait;
+ public $same = 2;
+}
+?>
+--EXPECTF--
+Fatal error: PropertiesExample and PropertiesTrait define the same property ($same) in the composition of PropertiesExample. However, the definition differs and is considered incompatible. Class was composed in %s
diff --git a/Zend/zend_inheritance.c b/Zend/zend_inheritance.c
index 71b3eb06da..675d8c4b75 100644
--- a/Zend/zend_inheritance.c
+++ b/Zend/zend_inheritance.c
@@ -23,7 +23,7 @@
#include "zend_execute.h"
#include "zend_inheritance.h"
#include "zend_smart_str.h"
-#include "zend_inheritance.h"
+#include "zend_operators.h"
static void overriden_ptr_dtor(zval *zv) /* {{{ */
{
@@ -1576,15 +1576,11 @@ static void zend_do_traits_property_binding(zend_class_entry *ce) /* {{{ */
== (flags & (ZEND_ACC_PPP_MASK | ZEND_ACC_STATIC))) {
/* flags are identical, now the value needs to be checked */
if (flags & ZEND_ACC_STATIC) {
- not_compatible = (FAILURE == compare_function(&compare_result,
- &ce->default_static_members_table[coliding_prop->offset],
- &ce->traits[i]->default_static_members_table[property_info->offset]))
- || (Z_LVAL(compare_result) != 0);
+ not_compatible = fast_is_not_identical_function(&ce->default_static_members_table[coliding_prop->offset],
+ &ce->traits[i]->default_static_members_table[property_info->offset]);
} else {
- not_compatible = (FAILURE == compare_function(&compare_result,
- &ce->default_properties_table[OBJ_PROP_TO_NUM(coliding_prop->offset)],
- &ce->traits[i]->default_properties_table[OBJ_PROP_TO_NUM(property_info->offset)]))
- || (Z_LVAL(compare_result) != 0);
+ not_compatible = fast_is_not_identical_function(&ce->default_properties_table[OBJ_PROP_TO_NUM(coliding_prop->offset)],
+ &ce->traits[i]->default_properties_table[OBJ_PROP_TO_NUM(property_info->offset)]);
}
} else {
/* the flags are not identical, thus, we assume properties are not compatible */