diff options
| author | Nikita Popov <nikita.ppv@gmail.com> | 2019-06-24 17:11:21 +0200 |
|---|---|---|
| committer | Nikita Popov <nikita.ppv@gmail.com> | 2019-06-25 10:25:44 +0200 |
| commit | 43dd1ac5709d92b2a96374e9bbe9de2f0c1cbf63 (patch) | |
| tree | 1d3c8bc4b0507b6fbf77ce050b0942de060e3f43 | |
| parent | 31123de0c8261356e312aa5c9eec3afa34b7e41e (diff) | |
| download | php-git-43dd1ac5709d92b2a96374e9bbe9de2f0c1cbf63.tar.gz | |
Avoid confusing gotos in phar_split_cache_list
| -rw-r--r-- | ext/phar/phar.c | 52 |
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; } } |
