Skip to content

Commit c74f1be

Browse files
committed
ext/phar: Prevent duplicate strlen() computation in phar_wrapper_open_dir()
1 parent a600713 commit c74f1be

File tree

1 file changed

+4
-5
lines changed

1 file changed

+4
-5
lines changed

Diff for: ext/phar/dirstream.c

+4-5
Original file line numberDiff line numberDiff line change
@@ -348,7 +348,8 @@ php_stream *phar_wrapper_open_dir(php_stream_wrapper *wrapper, const char *path,
348348
return NULL;
349349
}
350350

351-
if (NULL != (entry = zend_hash_str_find_ptr(&phar->manifest, internal_file, strlen(internal_file))) && !entry->is_dir) {
351+
size_t internal_file_len = strlen(internal_file);
352+
if (NULL != (entry = zend_hash_str_find_ptr(&phar->manifest, internal_file, internal_file_len)) && !entry->is_dir) {
352353
php_url_free(resource);
353354
return NULL;
354355
} else if (entry && entry->is_dir) {
@@ -360,15 +361,13 @@ php_stream *phar_wrapper_open_dir(php_stream_wrapper *wrapper, const char *path,
360361
php_url_free(resource);
361362
return phar_make_dirstream(internal_file, &phar->manifest);
362363
} else {
363-
size_t i_len = strlen(internal_file);
364364
zend_string *str_key;
365365

366366
/* search for directory */
367367
ZEND_HASH_MAP_FOREACH_STR_KEY(&phar->manifest, str_key) {
368-
if (zend_string_starts_with_cstr(str_key, internal_file, i_len)) {
368+
if (zend_string_starts_with_cstr(str_key, internal_file, internal_file_len)) {
369369
/* directory found */
370-
internal_file = estrndup(internal_file,
371-
i_len);
370+
internal_file = estrndup(internal_file, internal_file_len);
372371
php_url_free(resource);
373372
return phar_make_dirstream(internal_file, &phar->manifest);
374373
}

0 commit comments

Comments
 (0)