Commit b0aa6b9626a for php.net
commit b0aa6b9626a71dd865a573ef14eeb76fe6a6a372
Author: David CARLIER <devnexen@gmail.com>
Date: Thu Mar 12 17:56:43 2026 +0000
ext/soap: various optimisations
* replace strcat/strncpy with memcpy for pre-allocated buffers.
* remove redundant memset before struct copy.
diff --git a/ext/soap/php_http.c b/ext/soap/php_http.c
index 4bf599234f7..bac21d26b35 100644
--- a/ext/soap/php_http.c
+++ b/ext/soap/php_http.c
@@ -1168,18 +1168,12 @@ int make_http_soap_request(
char *t = ZSTR_VAL(new_uri->path);
char *p = strrchr(t, '/');
if (p) {
- zend_string *s = zend_string_alloc((p - t) + ZSTR_LEN(new_uri->path) + 2, 0);
- strncpy(ZSTR_VAL(s), t, (p - t) + 1);
- ZSTR_VAL(s)[(p - t) + 1] = 0;
- strcat(ZSTR_VAL(s), ZSTR_VAL(new_uri->path));
+ zend_string *s = zend_string_concat2(t, (p - t) + 1, ZSTR_VAL(new_uri->path), ZSTR_LEN(new_uri->path));
zend_string_release_ex(new_uri->path, 0);
new_uri->path = s;
}
} else {
- zend_string *s = zend_string_alloc(ZSTR_LEN(new_uri->path) + 2, 0);
- ZSTR_VAL(s)[0] = '/';
- ZSTR_VAL(s)[1] = 0;
- strcat(ZSTR_VAL(s), ZSTR_VAL(new_uri->path));
+ zend_string *s = zend_string_concat2("/", 1, ZSTR_VAL(new_uri->path), ZSTR_LEN(new_uri->path));
zend_string_release_ex(new_uri->path, 0);
new_uri->path = s;
}
diff --git a/ext/soap/php_sdl.c b/ext/soap/php_sdl.c
index e6871cd6e9b..ad37867dd46 100644
--- a/ext/soap/php_sdl.c
+++ b/ext/soap/php_sdl.c
@@ -2433,7 +2433,6 @@ static HashTable* make_persistent_sdl_function_headers(HashTable *headers, HashT
ZEND_HASH_MAP_FOREACH_STR_KEY_PTR(headers, key, tmp) {
pheader = malloc(sizeof(sdlSoapBindingFunctionHeader));
- memset(pheader, 0, sizeof(sdlSoapBindingFunctionHeader));
*pheader = *tmp;
if (pheader->name) {
@@ -2497,7 +2496,6 @@ static HashTable* make_persistent_sdl_parameters(HashTable *params, HashTable *p
ZEND_HASH_FOREACH_STR_KEY_PTR(params, key, tmp) {
pparam = malloc(sizeof(sdlParam));
- memset(pparam, 0, sizeof(sdlParam));
*pparam = *tmp;
if (pparam->paramName) {
@@ -2539,7 +2537,6 @@ static HashTable* make_persistent_sdl_function_faults(sdlFunctionPtr func, HashT
ZEND_HASH_MAP_FOREACH_STR_KEY_PTR(faults, key, tmp) {
pfault = malloc(sizeof(sdlFault));
- memset(pfault, 0, sizeof(sdlFault));
*pfault = *tmp;
if (pfault->name) {