From c74f1bebc6f26ffc08a19c4c742aee049621c60d Mon Sep 17 00:00:00 2001 From: Gina Peter Banyard Date: Thu, 26 Sep 2024 14:02:19 +0100 Subject: [PATCH] ext/phar: Prevent duplicate strlen() computation in phar_wrapper_open_dir() --- ext/phar/dirstream.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/ext/phar/dirstream.c b/ext/phar/dirstream.c index bcb41605c7f..3b85a57a06e 100644 --- a/ext/phar/dirstream.c +++ b/ext/phar/dirstream.c @@ -348,7 +348,8 @@ php_stream *phar_wrapper_open_dir(php_stream_wrapper *wrapper, const char *path, 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); return NULL; } 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); return phar_make_dirstream(internal_file, &phar->manifest); } else { - size_t i_len = strlen(internal_file); zend_string *str_key; /* search for directory */ 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 */ - internal_file = estrndup(internal_file, - i_len); + internal_file = estrndup(internal_file, internal_file_len); php_url_free(resource); return phar_make_dirstream(internal_file, &phar->manifest); }