]> granicus.if.org Git - php/commitdiff
Removed IS_TYPE_COPYABLE flag from IS_STRING zvals.
authorDmitry Stogov <dmitry@zend.com>
Thu, 18 Jan 2018 09:41:27 +0000 (12:41 +0300)
committerDmitry Stogov <dmitry@zend.com>
Thu, 18 Jan 2018 09:41:27 +0000 (12:41 +0300)
UPGRADING.INTERNALS
Zend/zend_types.h

index 45143ead7c5de263c0f4503df819cd8c7231083f..19eeacc57eeaf28b5a44744c40bd22108409d307 100644 (file)
@@ -14,6 +14,7 @@ PHP 7.3 INTERNALS UPGRADE NOTES
   k. zend_fcall_info_cache.initialized
   l. php_hrtime_current()
   m. zend_cpu_supports()
+  n. IS_TYPE_COPYABLE
 
 2. Build system changes
   a. Unix build system changes
@@ -102,6 +103,11 @@ PHP 7.3 INTERNALS UPGRADE NOTES
 
   m. zend_cpu_supports() determines if a feature is supported by current cpu.
 
+  n. IS_STRING zvals don't set IS_TYPE_COPYALE anymore. This prevents string
+     duplication by zval_copy_ctor(), ZVAL_DUP() and SEPARATE_ZVAL*() macros.
+     Interned strings didn't set IS_TYPE_COPYALE, so they aren't affected at
+     all.
+
 ========================
 2. Build system changes
 ========================
index 94650c59e2221a29e22ed04c83260daced81bf85..24f20913c22880ef6a3041e867296e31023f1238 100644 (file)
@@ -476,7 +476,7 @@ static zend_always_inline zend_uchar zval_get_type(const zval* pz) {
 /* extended types */
 #define IS_INTERNED_STRING_EX          IS_STRING
 
-#define IS_STRING_EX                           (IS_STRING         | ((IS_TYPE_REFCOUNTED | IS_TYPE_COPYABLE) << Z_TYPE_FLAGS_SHIFT))
+#define IS_STRING_EX                           (IS_STRING         | ((IS_TYPE_REFCOUNTED                   ) << Z_TYPE_FLAGS_SHIFT))
 #define IS_ARRAY_EX                                    (IS_ARRAY          | ((IS_TYPE_REFCOUNTED | IS_TYPE_COPYABLE) << Z_TYPE_FLAGS_SHIFT))
 #define IS_OBJECT_EX                           (IS_OBJECT         | ((IS_TYPE_REFCOUNTED                   ) << Z_TYPE_FLAGS_SHIFT))
 #define IS_RESOURCE_EX                         (IS_RESOURCE       | ((IS_TYPE_REFCOUNTED                   ) << Z_TYPE_FLAGS_SHIFT))