Skip to content

Commit 1d8ea4e

Browse files
committed
Refactor various raw C-string concatenation to use existing API
1 parent ef02969 commit 1d8ea4e

12 files changed

Lines changed: 65 additions & 101 deletions

File tree

ext/opcache/ZendAccelerator.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1943,10 +1943,10 @@ static zend_op_array *file_cache_compile_file(zend_file_handle *file_handle, int
19431943
/* ext/phar has to load phar's metadata into memory */
19441944
if (persistent_script->is_phar) {
19451945
php_stream_statbuf ssb;
1946-
char *fname = emalloc(sizeof("phar://") + ZSTR_LEN(persistent_script->script.filename));
1947-
1948-
memcpy(fname, "phar://", sizeof("phar://") - 1);
1949-
memcpy(fname + sizeof("phar://") - 1, ZSTR_VAL(persistent_script->script.filename), ZSTR_LEN(persistent_script->script.filename) + 1);
1946+
char *fname = zend_cstr_concat(
1947+
"phar://", sizeof("phar://") - 1,
1948+
ZSTR_VAL(persistent_script->script.filename),
1949+
ZSTR_LEN(persistent_script->script.filename));
19501950
php_stream_stat_path(fname, &ssb);
19511951
efree(fname);
19521952
}
@@ -2457,10 +2457,10 @@ zend_op_array *persistent_compile_file(zend_file_handle *file_handle, int type)
24572457
/* ext/phar has to load phar's metadata into memory */
24582458
if (persistent_script->is_phar) {
24592459
php_stream_statbuf ssb;
2460-
char *fname = emalloc(sizeof("phar://") + ZSTR_LEN(persistent_script->script.filename));
2461-
2462-
memcpy(fname, "phar://", sizeof("phar://") - 1);
2463-
memcpy(fname + sizeof("phar://") - 1, ZSTR_VAL(persistent_script->script.filename), ZSTR_LEN(persistent_script->script.filename) + 1);
2460+
char *fname = zend_cstr_concat(
2461+
"phar://", sizeof("phar://") - 1,
2462+
ZSTR_VAL(persistent_script->script.filename),
2463+
ZSTR_LEN(persistent_script->script.filename));
24642464
php_stream_stat_path(fname, &ssb);
24652465
efree(fname);
24662466
}

ext/pcntl/pcntl.c

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -746,13 +746,10 @@ PHP_FUNCTION(pcntl_exec)
746746
zend_string_addref(key);
747747
}
748748

749-
/* Length of element + equal sign + length of key + null */
750-
*pair = safe_emalloc(ZSTR_LEN(element_str) + 1, sizeof(char), ZSTR_LEN(key) + 1);
751-
/* Copy key=element + final null byte into buffer */
752-
memcpy(*pair, ZSTR_VAL(key), ZSTR_LEN(key));
753-
(*pair)[ZSTR_LEN(key)] = '=';
754-
/* Copy null byte */
755-
memcpy(*pair + ZSTR_LEN(key) + 1, ZSTR_VAL(element_str), ZSTR_LEN(element_str) + 1);
749+
*pair = zend_cstr_concat3(
750+
ZSTR_VAL(key), ZSTR_LEN(key),
751+
"=", 1,
752+
ZSTR_VAL(element_str), ZSTR_LEN(element_str));
756753

757754
/* Cleanup */
758755
zend_string_release_ex(key, false);

ext/pdo_pgsql/pgsql_driver.c

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -392,11 +392,10 @@ static zend_string* pgsql_handle_quoter(pdo_dbh_t *dbh, const zend_string *unquo
392392
return NULL;
393393
}
394394
quotedlen = tmp_len + 1;
395-
quoted = emalloc(quotedlen + 1);
396-
memcpy(quoted+1, escaped, quotedlen-2);
397-
quoted[0] = '\'';
398-
quoted[quotedlen-1] = '\'';
399-
quoted[quotedlen] = '\0';
395+
quoted = zend_cstr_concat3(
396+
"'", 1,
397+
(const char *) escaped, quotedlen - 2,
398+
"'", 1);
400399
PQfreemem(escaped);
401400
break;
402401
default:

ext/pgsql/pgsql.c

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3433,10 +3433,8 @@ static zend_result pgsql_copy_from_query(PGconn *pgsql, PGresult *pgsql_result,
34333433

34343434
int result;
34353435
if (ZSTR_LEN(tmp) > 0 && ZSTR_VAL(tmp)[ZSTR_LEN(tmp) - 1] != '\n') {
3436-
char *zquery = emalloc(ZSTR_LEN(tmp) + 2);
3437-
memcpy(zquery, ZSTR_VAL(tmp), ZSTR_LEN(tmp));
3438-
zquery[ZSTR_LEN(tmp)] = '\n';
3439-
zquery[ZSTR_LEN(tmp) + 1] = '\0';
3436+
char *zquery = zend_cstr_append_char(
3437+
ZSTR_VAL(tmp), ZSTR_LEN(tmp), '\n');
34403438
result = PQputCopyData(pgsql, zquery, ZSTR_LEN(tmp) + 1);
34413439
efree(zquery);
34423440
} else {

ext/phar/phar_object.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -633,9 +633,9 @@ PHP_METHOD(Phar, webPhar)
633633
IS_STRING == Z_TYPE_P(z_path_info)) {
634634
entry_len = Z_STRLEN_P(z_path_info);
635635
entry = estrndup(Z_STRVAL_P(z_path_info), entry_len);
636-
path_info = emalloc(Z_STRLEN_P(z_script_name) + entry_len + 1);
637-
memcpy(path_info, Z_STRVAL_P(z_script_name), Z_STRLEN_P(z_script_name));
638-
memcpy(path_info + Z_STRLEN_P(z_script_name), entry, entry_len + 1);
636+
path_info = zend_cstr_concat(
637+
Z_STRVAL_P(z_script_name), Z_STRLEN_P(z_script_name),
638+
entry, entry_len);
639639
free_pathinfo = 1;
640640
} else {
641641
entry_len = 0;

ext/soap/php_sdl.c

Lines changed: 16 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -85,12 +85,10 @@ static sdlTypePtr get_element(sdlPtr sdl, xmlNodePtr node, const xmlChar *type)
8585
size_t ns_len = xmlStrlen(nsptr->href);
8686
size_t type_len = strlen(cptype);
8787
size_t len = ns_len + type_len + 1;
88-
char *nscat = emalloc(len + 1);
89-
90-
memcpy(nscat, nsptr->href, ns_len);
91-
nscat[ns_len] = ':';
92-
memcpy(nscat+ns_len+1, cptype, type_len);
93-
nscat[len] = '\0';
88+
char *nscat = zend_cstr_concat3(
89+
(const char *) nsptr->href, ns_len,
90+
":", 1,
91+
cptype, type_len);
9492

9593
if ((sdl_type = zend_hash_str_find_ptr(sdl->elements, nscat, len)) != NULL) {
9694
ret = sdl_type;
@@ -117,13 +115,10 @@ encodePtr get_encoder(sdlPtr sdl, const char *ns, const char *type)
117115
size_t type_len = strlen(type);
118116
size_t len = ns_len + type_len + 1;
119117

120-
nscat = emalloc(len + 1);
121-
if (ns) {
122-
memcpy(nscat, ns, ns_len);
123-
}
124-
nscat[ns_len] = ':';
125-
memcpy(nscat+ns_len+1, type, type_len);
126-
nscat[len] = '\0';
118+
nscat = zend_cstr_concat3(
119+
ns, ns_len,
120+
":", 1,
121+
type, type_len);
127122

128123
enc = get_encoder_ex(sdl, nscat, len);
129124

@@ -138,11 +133,10 @@ encodePtr get_encoder(sdlPtr sdl, const char *ns, const char *type)
138133

139134
enc_ns_len = sizeof(XSD_NAMESPACE)-1;
140135
enc_len = enc_ns_len + type_len + 1;
141-
enc_nscat = emalloc(enc_len + 1);
142-
memcpy(enc_nscat, XSD_NAMESPACE, sizeof(XSD_NAMESPACE)-1);
143-
enc_nscat[enc_ns_len] = ':';
144-
memcpy(enc_nscat+enc_ns_len+1, type, type_len);
145-
enc_nscat[enc_len] = '\0';
136+
enc_nscat = zend_cstr_concat3(
137+
XSD_NAMESPACE, enc_ns_len,
138+
":", 1,
139+
type, type_len);
146140

147141
enc = get_encoder_ex(NULL, enc_nscat, enc_len);
148142
efree(enc_nscat);
@@ -1407,11 +1401,10 @@ static void sdl_deserialize_encoder(encodePtr enc, sdlTypePtr *types, char **in)
14071401

14081402
enc_ns_len = sizeof(XSD_NAMESPACE)-1;
14091403
enc_len = enc_ns_len + type_len + 1;
1410-
enc_nscat = emalloc(enc_len + 1);
1411-
memcpy(enc_nscat, XSD_NAMESPACE, sizeof(XSD_NAMESPACE)-1);
1412-
enc_nscat[enc_ns_len] = ':';
1413-
memcpy(enc_nscat+enc_ns_len+1, enc->details.type_str, type_len);
1414-
enc_nscat[enc_len] = '\0';
1404+
enc_nscat = zend_cstr_concat3(
1405+
XSD_NAMESPACE, enc_ns_len,
1406+
":", 1,
1407+
enc->details.type_str, type_len);
14151408

14161409
real_enc = get_encoder_ex(NULL, enc_nscat, enc_len);
14171410
efree(enc_nscat);

ext/standard/fsock.c

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -29,17 +29,10 @@ static size_t php_fsockopen_format_host_port(char **message, const char *prefix,
2929
int portlen = snprintf(portbuf, sizeof(portbuf), ":" ZEND_LONG_FMT, port);
3030
size_t total_len = prefix_len + host_len + portlen;
3131

32-
char *result = emalloc(total_len + 1);
33-
34-
if (prefix_len > 0) {
35-
memcpy(result, prefix, prefix_len);
36-
}
37-
memcpy(result + prefix_len, host, host_len);
38-
memcpy(result + prefix_len + host_len, portbuf, portlen);
39-
40-
result[total_len] = '\0';
41-
42-
*message = result;
32+
*message = zend_cstr_concat3(
33+
prefix, prefix_len,
34+
host, host_len,
35+
portbuf, portlen);
4336

4437
return total_len;
4538
}

ext/zip/php_zip.c

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1765,10 +1765,7 @@ PHP_METHOD(ZipArchive, addEmptyDir)
17651765
}
17661766

17671767
if (dirname[dirname_len-1] != '/') {
1768-
s=(char *)safe_emalloc(dirname_len, 1, 2);
1769-
strcpy(s, dirname);
1770-
s[dirname_len] = '/';
1771-
s[dirname_len+1] = '\0';
1768+
s = zend_cstr_append_char(dirname, dirname_len, '/');
17721769
} else {
17731770
s = dirname;
17741771
}

main/SAPI.c

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -369,10 +369,10 @@ SAPI_API size_t sapi_apply_default_charset(char **mimetype, size_t len)
369369
if (*mimetype != NULL) {
370370
if (*charset && strncmp(*mimetype, "text/", 5) == 0 && strstr(*mimetype, "charset=") == NULL) {
371371
newlen = len + (sizeof(";charset=")-1) + strlen(charset);
372-
newtype = emalloc(newlen + 1);
373-
PHP_STRLCPY(newtype, *mimetype, newlen + 1, len);
374-
strlcat(newtype, ";charset=", newlen + 1);
375-
strlcat(newtype, charset, newlen + 1);
372+
newtype = zend_cstr_concat3(
373+
*mimetype, len,
374+
";charset=", sizeof(";charset=")-1,
375+
charset, strlen(charset));
376376
efree(*mimetype);
377377
*mimetype = newtype;
378378
return newlen;
@@ -878,10 +878,9 @@ SAPI_API int sapi_send_headers(void)
878878
SG(sapi_headers).mimetype = default_mimetype;
879879

880880
default_header.header_len = sizeof("Content-type: ") - 1 + len;
881-
default_header.header = emalloc(default_header.header_len + 1);
882-
883-
memcpy(default_header.header, "Content-type: ", sizeof("Content-type: ") - 1);
884-
memcpy(default_header.header + sizeof("Content-type: ") - 1, SG(sapi_headers).mimetype, len + 1);
881+
default_header.header = zend_cstr_concat(
882+
"Content-type: ", sizeof("Content-type: ") - 1,
883+
SG(sapi_headers).mimetype, len);
885884

886885
sapi_header_add_op(SAPI_HEADER_ADD, &default_header);
887886
} else {

sapi/fpm/fpm/fpm_main.c

Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -568,15 +568,10 @@ static void sapi_cgi_register_variables(zval *track_vars_array) /* {{{ */
568568
unsigned int path_info_len = path_info ? strlen(path_info) : 0;
569569

570570
php_self_len = script_name_len + path_info_len;
571-
php_self = emalloc(php_self_len + 1);
572-
573571
/* Concat script_name and path_info into php_self */
574-
if (script_name) {
575-
memcpy(php_self, script_name, script_name_len + 1);
576-
}
577-
if (path_info) {
578-
memcpy(php_self + script_name_len, path_info, path_info_len + 1);
579-
}
572+
php_self = zend_cstr_concat(
573+
script_name, script_name_len,
574+
path_info, path_info_len);
580575

581576
/* Build the special-case PHP_SELF variable for the CGI version */
582577
if (sapi_module.input_filter(PARSE_SERVER, "PHP_SELF", &php_self, php_self_len, &php_self_len)) {
@@ -1235,12 +1230,9 @@ static void init_request_info(void)
12351230

12361231
/* PATH_TRANSLATED = DOCUMENT_ROOT + PATH_INFO */
12371232
path_translated_len = l + (env_path_info ? strlen(env_path_info) : 0);
1238-
path_translated = (char *) emalloc(path_translated_len + 1);
1239-
memcpy(path_translated, env_document_root, l);
1240-
if (env_path_info) {
1241-
memcpy(path_translated + l, env_path_info, (path_translated_len - l));
1242-
}
1243-
path_translated[path_translated_len] = '\0';
1233+
path_translated = zend_cstr_concat(
1234+
env_document_root, l,
1235+
env_path_info, path_translated_len - l);
12441236
if (orig_path_translated) {
12451237
FCGI_PUTENV(request, "ORIG_PATH_TRANSLATED", orig_path_translated);
12461238
}
@@ -1254,12 +1246,9 @@ static void init_request_info(void)
12541246
int path_translated_len = ptlen + (env_path_info ? strlen(env_path_info) : 0);
12551247
char *path_translated = NULL;
12561248

1257-
path_translated = (char *) emalloc(path_translated_len + 1);
1258-
memcpy(path_translated, pt, ptlen);
1259-
if (env_path_info) {
1260-
memcpy(path_translated + ptlen, env_path_info, path_translated_len - ptlen);
1261-
}
1262-
path_translated[path_translated_len] = '\0';
1249+
path_translated = zend_cstr_concat(
1250+
pt, ptlen,
1251+
env_path_info, path_translated_len - ptlen);
12631252
if (orig_path_translated) {
12641253
FCGI_PUTENV(request, "ORIG_PATH_TRANSLATED", orig_path_translated);
12651254
}

0 commit comments

Comments
 (0)