summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2019-06-24 17:11:21 +0200
committerNikita Popov <nikita.ppv@gmail.com>2019-06-25 10:25:44 +0200
commit43dd1ac5709d92b2a96374e9bbe9de2f0c1cbf63 (patch)
tree1d3c8bc4b0507b6fbf77ce050b0942de060e3f43
parent31123de0c8261356e312aa5c9eec3afa34b7e41e (diff)
downloadphp-git-43dd1ac5709d92b2a96374e9bbe9de2f0c1cbf63.tar.gz
Avoid confusing gotos in phar_split_cache_list
-rw-r--r--ext/phar/phar.c52
1 files changed, 24 insertions, 28 deletions
diff --git a/ext/phar/phar.c b/ext/phar/phar.c
index 25bb2c9e4a..109ec24afa 100644
--- a/ext/phar/phar.c
+++ b/ext/phar/phar.c
@@ -130,37 +130,33 @@ static void phar_split_cache_list(void) /* {{{ */
for (key = php_strtok_r(tmp, ds, &lasts);
key;
key = php_strtok_r(NULL, ds, &lasts)) {
+ size_t len;
end = strchr(key, DEFAULT_DIR_SEPARATOR);
-
if (end) {
- if (SUCCESS == phar_open_from_filename(key, end - key, NULL, 0, 0, &phar, NULL)) {
-finish_up:
- phar->phar_pos = i++;
- php_stream_close(phar->fp);
- phar->fp = NULL;
- } else {
-finish_error:
- PHAR_G(persist) = 0;
- PHAR_G(manifest_cached) = 0;
- efree(tmp);
- zend_hash_destroy(&(PHAR_G(phar_fname_map)));
- HT_INVALIDATE(&PHAR_G(phar_fname_map));
- zend_hash_destroy(&(PHAR_G(phar_alias_map)));
- HT_INVALIDATE(&PHAR_G(phar_alias_map));
- zend_hash_destroy(&cached_phars);
- zend_hash_destroy(&cached_alias);
- zend_hash_graceful_reverse_destroy(&EG(regular_list));
- memset(&EG(regular_list), 0, sizeof(HashTable));
- /* free cached manifests */
- PHAR_G(request_init) = 0;
- return;
- }
+ len = end - key;
} else {
- if (SUCCESS == phar_open_from_filename(key, strlen(key), NULL, 0, 0, &phar, NULL)) {
- goto finish_up;
- } else {
- goto finish_error;
- }
+ len = strlen(key);
+ }
+
+ if (SUCCESS == phar_open_from_filename(key, len, NULL, 0, 0, &phar, NULL)) {
+ phar->phar_pos = i++;
+ php_stream_close(phar->fp);
+ phar->fp = NULL;
+ } else {
+ PHAR_G(persist) = 0;
+ PHAR_G(manifest_cached) = 0;
+ efree(tmp);
+ zend_hash_destroy(&(PHAR_G(phar_fname_map)));
+ HT_INVALIDATE(&PHAR_G(phar_fname_map));
+ zend_hash_destroy(&(PHAR_G(phar_alias_map)));
+ HT_INVALIDATE(&PHAR_G(phar_alias_map));
+ zend_hash_destroy(&cached_phars);
+ zend_hash_destroy(&cached_alias);
+ zend_hash_graceful_reverse_destroy(&EG(regular_list));
+ memset(&EG(regular_list), 0, sizeof(HashTable));
+ /* free cached manifests */
+ PHAR_G(request_init) = 0;
+ return;
}
}