summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2019-02-12 11:43:23 +0100
committerNikita Popov <nikita.ppv@gmail.com>2019-02-12 11:43:34 +0100
commit5297bed4540e25d1d6c8e091bf18d0fa91533fd2 (patch)
tree917c719a8af51098dbceb97c7bb03e339bd98046
parent2ea5a9cc6470564a377b71f7fd07972f1c026887 (diff)
parent07877c46e3057bc679766898d50529be812243f3 (diff)
downloadphp-git-5297bed4540e25d1d6c8e091bf18d0fa91533fd2.tar.gz
Merge branch 'PHP-7.2' into PHP-7.3
-rw-r--r--NEWS2
-rw-r--r--Zend/zend_constants.c4
-rw-r--r--ext/standard/tests/general_functions/bug72920.phpt11
-rw-r--r--tests/classes/constants_visibility_002.phpt6
-rw-r--r--tests/classes/constants_visibility_003.phpt6
-rw-r--r--tests/classes/constants_visibility_008.phpt12
6 files changed, 23 insertions, 18 deletions
diff --git a/NEWS b/NEWS
index c9cb245604..a08f0da3c0 100644
--- a/NEWS
+++ b/NEWS
@@ -13,6 +13,8 @@ PHP NEWS
property). (Nikita)
. Fixed bug #77530 (PHP crashes when parsing `(2)::class`). (Ekin)
. Fixed bug #77546 (iptcembed broken function). (gdegoulet)
+ . Fixed bug #75546 (function "defined" should ignore class constant
+ visibility). (Daniel Ciochiu)
- Exif:
. Fixed bug #77564 (Memory leak in exif_process_IFD_TAG). (Ben Ramsey)
diff --git a/Zend/zend_constants.c b/Zend/zend_constants.c
index 80ed43513a..e2a945c746 100644
--- a/Zend/zend_constants.c
+++ b/Zend/zend_constants.c
@@ -378,7 +378,9 @@ ZEND_API zval *zend_get_constant_ex(zend_string *cname, zend_class_entry *scope,
ret_constant = NULL;
} else {
if (!zend_verify_const_access(c, scope)) {
- zend_throw_error(NULL, "Cannot access %s const %s::%s", zend_visibility_string(Z_ACCESS_FLAGS(c->value)), ZSTR_VAL(class_name), ZSTR_VAL(constant_name));
+ if ((flags & ZEND_FETCH_CLASS_SILENT) == 0) {
+ zend_throw_error(NULL, "Cannot access %s const %s::%s", zend_visibility_string(Z_ACCESS_FLAGS(c->value)), ZSTR_VAL(class_name), ZSTR_VAL(constant_name));
+ }
goto failure;
}
ret_constant = &c->value;
diff --git a/ext/standard/tests/general_functions/bug72920.phpt b/ext/standard/tests/general_functions/bug72920.phpt
index b5ca4760c3..8ba4d26713 100644
--- a/ext/standard/tests/general_functions/bug72920.phpt
+++ b/ext/standard/tests/general_functions/bug72920.phpt
@@ -6,10 +6,7 @@ class Foo {
private const C1 = "a";
}
-try {
- var_dump(constant('Foo::C1'));
-} catch (Error $e) {
- var_dump($e->getMessage());
-}
---EXPECT--
-string(35) "Cannot access private const Foo::C1"
+var_dump(constant('Foo::C1'));
+--EXPECTF--
+Warning: constant(): Couldn't find constant Foo::C1 in %s on line %d
+NULL
diff --git a/tests/classes/constants_visibility_002.phpt b/tests/classes/constants_visibility_002.phpt
index 6ec9901269..4e0ecb1aa2 100644
--- a/tests/classes/constants_visibility_002.phpt
+++ b/tests/classes/constants_visibility_002.phpt
@@ -21,8 +21,4 @@ constant('A::protectedConst');
string(14) "protectedConst"
string(14) "protectedConst"
-Fatal error: Uncaught Error: Cannot access protected const A::protectedConst in %s:14
-Stack trace:
-#0 %s(14): constant('A::protectedCon...')
-#1 {main}
- thrown in %s on line 14
+Warning: constant(): Couldn't find constant A::protectedConst in %s on line %d
diff --git a/tests/classes/constants_visibility_003.phpt b/tests/classes/constants_visibility_003.phpt
index 9c7bcfb21c..7c961695ed 100644
--- a/tests/classes/constants_visibility_003.phpt
+++ b/tests/classes/constants_visibility_003.phpt
@@ -21,8 +21,4 @@ constant('A::privateConst');
string(12) "privateConst"
string(12) "privateConst"
-Fatal error: Uncaught Error: Cannot access private const A::privateConst in %s:14
-Stack trace:
-#0 %s(14): constant('A::privateConst')
-#1 {main}
- thrown in %s on line 14
+Warning: constant(): Couldn't find constant A::privateConst in %s on line %d
diff --git a/tests/classes/constants_visibility_008.phpt b/tests/classes/constants_visibility_008.phpt
new file mode 100644
index 0000000000..f24b70cf59
--- /dev/null
+++ b/tests/classes/constants_visibility_008.phpt
@@ -0,0 +1,12 @@
+--TEST--
+Defined on private constant should not raise exception
+--FILE--
+<?php
+
+class Foo
+{
+ private const BAR = 1;
+}
+echo (int)defined('Foo::BAR');
+--EXPECTF--
+0