diff options
author | Xinchen Hui <laruence@gmail.com> | 2016-08-17 18:19:59 +0800 |
---|---|---|
committer | Xinchen Hui <laruence@gmail.com> | 2016-08-17 18:19:59 +0800 |
commit | 0fd032893383c658428c5bc3f6693482c7acd6e4 (patch) | |
tree | 226da43b653327317c48f6074349e73a3ac2530e /ext | |
parent | afa832b5a6f96337fbd8d55f25e1b78d9c634d48 (diff) | |
parent | 195d7618e7e61065925299f58647b5fb8806987b (diff) | |
download | php-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.c | 20 |
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; |