summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorXinchen Hui <laruence@gmail.com>2016-08-17 18:19:59 +0800
committerXinchen Hui <laruence@gmail.com>2016-08-17 18:19:59 +0800
commit0fd032893383c658428c5bc3f6693482c7acd6e4 (patch)
tree226da43b653327317c48f6074349e73a3ac2530e /ext
parentafa832b5a6f96337fbd8d55f25e1b78d9c634d48 (diff)
parent195d7618e7e61065925299f58647b5fb8806987b (diff)
downloadphp-git-0fd032893383c658428c5bc3f6693482c7acd6e4.tar.gz
Merge branch 'PHP-7.0' into PHP-7.1
* PHP-7.0: Avoid duplicating string
Diffstat (limited to 'ext')
-rw-r--r--ext/wddx/wddx.c20
1 files changed, 9 insertions, 11 deletions
diff --git a/ext/wddx/wddx.c b/ext/wddx/wddx.c
index bf0bcaad06..3780270769 100644
--- a/ext/wddx/wddx.c
+++ b/ext/wddx/wddx.c
@@ -1032,27 +1032,25 @@ static void php_wddx_process_data(void *user_data, const XML_Char *s, int len)
break;
case ST_DATETIME: {
- char *tmp;
+ zend_string *str;
if (Z_TYPE(ent->data) == IS_STRING) {
- tmp = safe_emalloc(Z_STRLEN(ent->data), 1, (size_t)len + 1);
- memcpy(tmp, Z_STRVAL(ent->data), Z_STRLEN(ent->data));
- memcpy(tmp + Z_STRLEN(ent->data), s, len);
- len += Z_STRLEN(ent->data);
+ str = zend_string_safe_alloc(Z_STRLEN(ent->data), 1, len, 0);
+ memcpy(ZSTR_VAL(str), Z_STRVAL(ent->data), Z_STRLEN(ent->data));
+ memcpy(ZSTR_VAL(str) + Z_STRLEN(ent->data), s, len);
+ ZSTR_VAL(str)[ZSTR_LEN(str)] = '\0';
zval_dtor(&ent->data);
} else {
- tmp = emalloc(len + 1);
- memcpy(tmp, (char *)s, len);
+ str = zend_string_init((char *)s, len, 0);
}
- tmp[len] = '\0';
- ZVAL_LONG(&ent->data, php_parse_date(tmp, NULL));
+ ZVAL_LONG(&ent->data, php_parse_date(str, NULL));
/* date out of range < 1969 or > 2038 */
if (Z_LVAL(ent->data) == -1) {
- ZVAL_STRINGL(&ent->data, (char *)tmp, len);
+ ZVAL_STR_COPY(&ent->data, str);
}
- efree(tmp);
+ zend_string_release(str);
}
break;