summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2018-01-19 13:41:35 +0300
committerDmitry Stogov <dmitry@zend.com>2018-01-19 13:41:35 +0300
commit41ef2952c866e34a51185d26b1e105016e9c5108 (patch)
tree38f65d86c195d2579d9c182e0129d6c4004c5c04
parentd8f916124b9bc4e8fa1f0d10fc95bcab09115d50 (diff)
downloadphp-git-41ef2952c866e34a51185d26b1e105016e9c5108.tar.gz
Only persistent referencecounted strings should be duplicated.
-rw-r--r--ext/standard/browscap.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/ext/standard/browscap.c b/ext/standard/browscap.c
index e58a20cd4d..60c012707d 100644
--- a/ext/standard/browscap.c
+++ b/ext/standard/browscap.c
@@ -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));
+ }
+ }
}
/* }}} */