]> granicus.if.org Git - php/commitdiff
Fixed bug #76337
authorxKhorasan <xKhorasan@gmail.com>
Mon, 14 May 2018 22:36:14 +0000 (07:36 +0900)
committerAnatol Belski <ab@php.net>
Sun, 20 May 2018 11:33:03 +0000 (13:33 +0200)
Zend/tests/bug76337.phpt [new file with mode: 0644]
Zend/zend_API.c
ext/zend_test/test.c

diff --git a/Zend/tests/bug76337.phpt b/Zend/tests/bug76337.phpt
new file mode 100644 (file)
index 0000000..07608e2
--- /dev/null
@@ -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)
index 9f6e933993020500face11b9f45d2ebf3ed64f66..fedef6f57490439e533d67070435cd89a17edf1e 100644 (file)
@@ -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) {
index 47d4b44d1d83efca4baa362cc9231901fc9860f0..1765efe7cbab200841360dcc926d4f167803f326 100644 (file)
@@ -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;
 }