]> granicus.if.org Git - php/commitdiff
Only persistent referencecounted strings should be duplicated.
authorDmitry Stogov <dmitry@zend.com>
Fri, 19 Jan 2018 10:41:35 +0000 (13:41 +0300)
committerDmitry Stogov <dmitry@zend.com>
Fri, 19 Jan 2018 10:41:35 +0000 (13:41 +0300)
ext/standard/browscap.c

index e58a20cd4dcdbbddb30bc32230fb36288508f114..60c012707d3decab19e7a084773a66990ced3442 100644 (file)
@@ -688,7 +688,17 @@ static int browser_reg_compare(
 
 static void browscap_zval_copy_ctor(zval *p) /* {{{ */
 {
-       zval_copy_ctor(p);
+       if (Z_REFCOUNTED_P(p)) {
+               zend_string *str;
+
+               ZEND_ASSERT(Z_TYPE_P(p) == IS_STRING);
+               str = Z_STR_P(p);
+               if (!(GC_FLAGS(str) & GC_PERSISTENT)) {
+                       GC_ADDREF(str);
+               } else {
+                       ZVAL_NEW_STR(p, zend_string_init(ZSTR_VAL(str), ZSTR_LEN(str), 0));
+               }
+       }
 }
 /* }}} */