diff options
author | xKhorasan <xKhorasan@gmail.com> | 2018-05-15 07:36:14 +0900 |
---|---|---|
committer | Anatol Belski <ab@php.net> | 2018-05-20 13:33:03 +0200 |
commit | 5681f6523bb36d6b49ab802ddba75e53d8d45268 (patch) | |
tree | e74abcc3e306d13c4ee5b7c737646390f93d2c5b | |
parent | a8a1dc038cdab5c333fe443577b375f86d2c5a3e (diff) | |
download | php-git-5681f6523bb36d6b49ab802ddba75e53d8d45268.tar.gz |
Fixed bug #76337
-rw-r--r-- | Zend/tests/bug76337.phpt | 12 | ||||
-rw-r--r-- | Zend/zend_API.c | 1 | ||||
-rw-r--r-- | ext/zend_test/test.c | 2 |
3 files changed, 15 insertions, 0 deletions
diff --git a/Zend/tests/bug76337.phpt b/Zend/tests/bug76337.phpt new file mode 100644 index 0000000000..07608e2660 --- /dev/null +++ b/Zend/tests/bug76337.phpt @@ -0,0 +1,12 @@ +--TEST-- +Bug 76337: segmentation fault when an extension use zend_register_class_alias() and opcache enabled +--SKIPIF-- +<?php if (!class_exists('_ZendTestClass') || !extension_loaded('Zend OPcache')) die('skip'); +--INI-- +opcache.enable=1 +opcache.enable_cli=1 +--FILE-- +<?php +var_dump(class_exists('_ZendTestClassAlias')); +--EXPECT-- +bool(true) diff --git a/Zend/zend_API.c b/Zend/zend_API.c index 9f6e933993..fedef6f574 100644 --- a/Zend/zend_API.c +++ b/Zend/zend_API.c @@ -2785,6 +2785,7 @@ ZEND_API int zend_register_class_alias_ex(const char *name, size_t name_len, zen zend_assert_valid_class_name(lcname); + lcname = zend_new_interned_string(lcname); ce = zend_hash_add_ptr(CG(class_table), lcname, ce); zend_string_release(lcname); if (ce) { diff --git a/ext/zend_test/test.c b/ext/zend_test/test.c index 47d4b44d1d..1765efe7cb 100644 --- a/ext/zend_test/test.c +++ b/ext/zend_test/test.c @@ -200,6 +200,8 @@ PHP_MINIT_FUNCTION(zend_test) zend_test_trait = zend_register_internal_class(&class_entry); zend_test_trait->ce_flags |= ZEND_ACC_TRAIT; zend_declare_property_null(zend_test_trait, "testProp", sizeof("testProp")-1, ZEND_ACC_PUBLIC); + + zend_register_class_alias("_ZendTestClassAlias", zend_test_class); return SUCCESS; } |