Skip to content

Commit 6b71fff

Browse files
committed
ext/spl: zend_string_concat3() instead of manual memcpy for sub_path construction
1 parent 83b8a89 commit 6b71fff

1 file changed

Lines changed: 8 additions & 5 deletions

File tree

ext/spl/spl_directory.c

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1470,11 +1470,14 @@ PHP_METHOD(RecursiveDirectoryIterator, getChildren)
14701470
if (subdir) {
14711471
size_t name_len = strlen(intern->u.dir.entry.d_name);
14721472
if (intern->u.dir.sub_path && ZSTR_LEN(intern->u.dir.sub_path)) {
1473-
zend_string *sub_path = zend_string_alloc(ZSTR_LEN(intern->u.dir.sub_path) + 1 + name_len, 0);
1474-
memcpy(ZSTR_VAL(sub_path), ZSTR_VAL(intern->u.dir.sub_path), ZSTR_LEN(intern->u.dir.sub_path));
1475-
ZSTR_VAL(sub_path)[ZSTR_LEN(intern->u.dir.sub_path)] = slash;
1476-
memcpy(ZSTR_VAL(sub_path) + ZSTR_LEN(intern->u.dir.sub_path) + 1, intern->u.dir.entry.d_name, name_len);
1477-
ZSTR_VAL(sub_path)[ZSTR_LEN(intern->u.dir.sub_path) + 1 + name_len] = 0;
1473+
zend_string *sub_path = zend_string_concat3(
1474+
ZSTR_VAL(intern->u.dir.sub_path),
1475+
ZSTR_LEN(intern->u.dir.sub_path),
1476+
&slash,
1477+
1,
1478+
intern->u.dir.entry.d_name,
1479+
name_len
1480+
);
14781481
subdir->u.dir.sub_path = sub_path;
14791482
} else {
14801483
subdir->u.dir.sub_path = zend_string_init(intern->u.dir.entry.d_name, name_len, 0);

0 commit comments

Comments
 (0)