mirror of
https://github.com/php/php-src.git
synced 2025-08-16 05:58:45 +02:00
ext/phar: Prevent duplicate strlen() computation in phar_wrapper_open_dir()
This commit is contained in:
parent
a600713cd6
commit
c74f1bebc6
1 changed files with 4 additions and 5 deletions
|
@ -348,7 +348,8 @@ php_stream *phar_wrapper_open_dir(php_stream_wrapper *wrapper, const char *path,
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (NULL != (entry = zend_hash_str_find_ptr(&phar->manifest, internal_file, strlen(internal_file))) && !entry->is_dir) {
|
size_t internal_file_len = strlen(internal_file);
|
||||||
|
if (NULL != (entry = zend_hash_str_find_ptr(&phar->manifest, internal_file, internal_file_len)) && !entry->is_dir) {
|
||||||
php_url_free(resource);
|
php_url_free(resource);
|
||||||
return NULL;
|
return NULL;
|
||||||
} else if (entry && entry->is_dir) {
|
} else if (entry && entry->is_dir) {
|
||||||
|
@ -360,15 +361,13 @@ php_stream *phar_wrapper_open_dir(php_stream_wrapper *wrapper, const char *path,
|
||||||
php_url_free(resource);
|
php_url_free(resource);
|
||||||
return phar_make_dirstream(internal_file, &phar->manifest);
|
return phar_make_dirstream(internal_file, &phar->manifest);
|
||||||
} else {
|
} else {
|
||||||
size_t i_len = strlen(internal_file);
|
|
||||||
zend_string *str_key;
|
zend_string *str_key;
|
||||||
|
|
||||||
/* search for directory */
|
/* search for directory */
|
||||||
ZEND_HASH_MAP_FOREACH_STR_KEY(&phar->manifest, str_key) {
|
ZEND_HASH_MAP_FOREACH_STR_KEY(&phar->manifest, str_key) {
|
||||||
if (zend_string_starts_with_cstr(str_key, internal_file, i_len)) {
|
if (zend_string_starts_with_cstr(str_key, internal_file, internal_file_len)) {
|
||||||
/* directory found */
|
/* directory found */
|
||||||
internal_file = estrndup(internal_file,
|
internal_file = estrndup(internal_file, internal_file_len);
|
||||||
i_len);
|
|
||||||
php_url_free(resource);
|
php_url_free(resource);
|
||||||
return phar_make_dirstream(internal_file, &phar->manifest);
|
return phar_make_dirstream(internal_file, &phar->manifest);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue