summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorxKhorasan <xKhorasan@gmail.com>2018-05-15 07:36:14 +0900
committerAnatol Belski <ab@php.net>2018-05-20 13:33:03 +0200
commit5681f6523bb36d6b49ab802ddba75e53d8d45268 (patch)
treee74abcc3e306d13c4ee5b7c737646390f93d2c5b
parenta8a1dc038cdab5c333fe443577b375f86d2c5a3e (diff)
downloadphp-git-5681f6523bb36d6b49ab802ddba75e53d8d45268.tar.gz
Fixed bug #76337
-rw-r--r--Zend/tests/bug76337.phpt12
-rw-r--r--Zend/zend_API.c1
-rw-r--r--ext/zend_test/test.c2
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;
}