]> granicus.if.org Git - php/commitdiff
Fixed zend_string related inconsistencies
authorDmitry Stogov <dmitry@zend.com>
Tue, 21 Apr 2015 20:26:34 +0000 (23:26 +0300)
committerDmitry Stogov <dmitry@zend.com>
Tue, 21 Apr 2015 20:26:34 +0000 (23:26 +0300)
Zend/zend_string.c
Zend/zend_string.h
ext/opcache/ZendAccelerator.c

index f20304570adbbd49ddf88bf2e9df529288af2fc5..e8685a42b28fa9840546e35117764c8e4e613b46 100644 (file)
@@ -53,6 +53,7 @@ void zend_interned_strings_init(void)
        CG(interned_strings).nTableMask = -CG(interned_strings).nTableSize;
        HT_SET_DATA_ADDR(&CG(interned_strings), pemalloc(HT_SIZE(&CG(interned_strings)), 1));
        HT_HASH_RESET(&CG(interned_strings));
+       CG(interned_strings).u.flags |= HASH_FLAG_INITIALIZED;
 
        /* interned empty string */
        str = zend_string_alloc(sizeof("")-1, 1);
index 97528a71f34a70b48ccadb2b5dc0e5f6da9d582f..0774646b2cad7709f97812d6339b43a7dcec06fb 100644 (file)
@@ -44,6 +44,7 @@ END_EXTERN_C()
 #define STR_ALLOCA_ALLOC(str, _len, use_heap) do { \
        (str) = (zend_string *)do_alloca(ZEND_MM_ALIGNED_SIZE(_STR_HEADER_SIZE + (_len) + 1), (use_heap)); \
        GC_REFCOUNT(str) = 1; \
+       GC_TYPE_INFO(str) = IS_STRING; \
        (str)->h = 0; \
        (str)->len = (_len); \
 } while (0)
index 8577ba3834d47be277ac8f99c69f3bb17d66f075..8259cfa9af3d8e487cb6bb45da265383a6c0b4b2 100644 (file)
@@ -466,6 +466,7 @@ static void accel_use_shm_interned_strings(void)
 
                auto_global = (zend_auto_global*)Z_PTR(p->val);;
 
+               zend_string_addref(auto_global->name);
                auto_global->name = accel_new_interned_string(auto_global->name);
                if (p->key) {
                        p->key = accel_new_interned_string(p->key);