ext/phar: Prevent duplicate strlen() computation in phar_wrapper_open_dir()

This commit is contained in:
Gina Peter Banyard 2024-09-26 14:02:19 +01:00
parent a600713cd6
commit c74f1bebc6

View file

@ -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);
} }