]> granicus.if.org Git - php/commitdiff
Use HT_IS_INITIALIZED() and HT_INVALIDATE() macros instead of hackish HT_FLAGS assumt...
authorDmitry Stogov <dmitry@zend.com>
Thu, 27 Dec 2018 19:48:25 +0000 (22:48 +0300)
committerDmitry Stogov <dmitry@zend.com>
Thu, 27 Dec 2018 19:48:25 +0000 (22:48 +0300)
Zend/zend_hash.h
ext/phar/dirstream.c
ext/phar/func_interceptors.c
ext/phar/phar.c
ext/phar/phar_object.c
ext/phar/stream.c
ext/phar/util.c
ext/phar/zip.c

index d045a7abc532ef71929c5e7cce0ef162ead18609..69ab04d2fcf2615970066655c4aebc31d63231e6 100644 (file)
 
 #define HT_FLAGS(ht) (ht)->u.flags
 
+#define HT_INVALIDATE(ht) do { \
+               HT_FLAGS(ht) = 0; \
+       } while (0)
+
+#define HT_IS_INITIALIZED(ht) \
+       ((HT_FLAGS(ht) & HASH_FLAG_INITIALIZED) != 0)
+
 #define HT_IS_PACKED(ht) \
        ((HT_FLAGS(ht) & HASH_FLAG_PACKED) != 0)
 
index 548ef14d07c4c8a118120a83f44ce74199993917..985f0f6db044ab4951b8ef0de17816e76ca42154 100644 (file)
@@ -361,7 +361,7 @@ php_stream *phar_wrapper_open_dir(php_stream_wrapper *wrapper, const char *path,
                return ret;
        }
 
-       if (!HT_FLAGS(&phar->manifest)) {
+       if (!HT_IS_INITIALIZED(&phar->manifest)) {
                php_url_free(resource);
                return NULL;
        }
index 87020c5ed86608354ce181c46a40eb571c6d38fc..4531c710f8f2f011af06b5810e908dfd92f3022b 100644 (file)
@@ -31,8 +31,8 @@ PHAR_FUNC(phar_opendir) /* {{{ */
                goto skip_phar;
        }
 
-       if ((HT_FLAGS(&PHAR_G(phar_fname_map)) && !zend_hash_num_elements(&(PHAR_G(phar_fname_map))))
-               && !HT_FLAGS(&cached_phars)) {
+       if ((HT_IS_INITIALIZED(&PHAR_G(phar_fname_map)) && !zend_hash_num_elements(&(PHAR_G(phar_fname_map))))
+               && !HT_IS_INITIALIZED(&cached_phars)) {
                goto skip_phar;
        }
 
@@ -104,8 +104,8 @@ PHAR_FUNC(phar_file_get_contents) /* {{{ */
                goto skip_phar;
        }
 
-       if ((HT_FLAGS(&PHAR_G(phar_fname_map)) && !zend_hash_num_elements(&(PHAR_G(phar_fname_map))))
-               && !HT_FLAGS(&cached_phars)) {
+       if ((HT_IS_INITIALIZED(&PHAR_G(phar_fname_map)) && !zend_hash_num_elements(&(PHAR_G(phar_fname_map))))
+               && !HT_IS_INITIALIZED(&cached_phars)) {
                goto skip_phar;
        }
 
@@ -237,8 +237,8 @@ PHAR_FUNC(phar_readfile) /* {{{ */
                goto skip_phar;
        }
 
-       if ((HT_FLAGS(&PHAR_G(phar_fname_map)) && !zend_hash_num_elements(&(PHAR_G(phar_fname_map))))
-               && !HT_FLAGS(&cached_phars)) {
+       if ((HT_IS_INITIALIZED(&PHAR_G(phar_fname_map)) && !zend_hash_num_elements(&(PHAR_G(phar_fname_map))))
+               && !HT_IS_INITIALIZED(&cached_phars)) {
                goto skip_phar;
        }
        if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS(), "p|br!", &filename, &filename_len, &use_include_path, &zcontext) == FAILURE) {
@@ -337,8 +337,8 @@ PHAR_FUNC(phar_fopen) /* {{{ */
                goto skip_phar;
        }
 
-       if ((HT_FLAGS(&PHAR_G(phar_fname_map)) && !zend_hash_num_elements(&(PHAR_G(phar_fname_map))))
-               && !HT_FLAGS(&cached_phars)) {
+       if ((HT_IS_INITIALIZED(&PHAR_G(phar_fname_map)) && !zend_hash_num_elements(&(PHAR_G(phar_fname_map))))
+               && !HT_IS_INITIALIZED(&cached_phars)) {
                /* no need to check, include_path not even specified in fopen/ no active phars */
                goto skip_phar;
        }
@@ -852,8 +852,8 @@ PHAR_FUNC(phar_is_file) /* {{{ */
                goto skip_phar;
        }
 
-       if ((HT_FLAGS(&PHAR_G(phar_fname_map)) && !zend_hash_num_elements(&(PHAR_G(phar_fname_map))))
-               && !HT_FLAGS(&cached_phars)) {
+       if ((HT_IS_INITIALIZED(&PHAR_G(phar_fname_map)) && !zend_hash_num_elements(&(PHAR_G(phar_fname_map))))
+               && !HT_IS_INITIALIZED(&cached_phars)) {
                goto skip_phar;
        }
        if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS(), "p", &filename, &filename_len) == FAILURE) {
@@ -919,8 +919,8 @@ PHAR_FUNC(phar_is_link) /* {{{ */
                goto skip_phar;
        }
 
-       if ((HT_FLAGS(&PHAR_G(phar_fname_map)) && !zend_hash_num_elements(&(PHAR_G(phar_fname_map))))
-               && !HT_FLAGS(&cached_phars)) {
+       if ((HT_IS_INITIALIZED(&PHAR_G(phar_fname_map)) && !zend_hash_num_elements(&(PHAR_G(phar_fname_map))))
+               && !HT_IS_INITIALIZED(&cached_phars)) {
                goto skip_phar;
        }
        if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS(), "p", &filename, &filename_len) == FAILURE) {
index 4d5988eaa9b4d408075a05c3db018ea42dbe3cd8..ac14b8bafe6e8e8ce685f055c796807b11923a6d 100644 (file)
@@ -80,7 +80,7 @@ ZEND_INI_MH(phar_ini_modify_handler) /* {{{ */
 
        if (ZSTR_LEN(entry->name) == sizeof("phar.readonly")-1) {
                PHAR_G(readonly) = ini;
-               if (PHAR_G(request_init) && HT_FLAGS(&PHAR_G(phar_fname_map))) {
+               if (PHAR_G(request_init) && HT_IS_INITIALIZED(&PHAR_G(phar_fname_map))) {
                        zend_hash_apply_with_argument(&(PHAR_G(phar_fname_map)), phar_set_writeable_bit, (void *)&ini);
                }
        } else {
@@ -144,9 +144,9 @@ finish_error:
                                PHAR_G(manifest_cached) = 0;
                                efree(tmp);
                                zend_hash_destroy(&(PHAR_G(phar_fname_map)));
-                               HT_FLAGS(&PHAR_G(phar_fname_map)) = 0;
+                               HT_INVALIDATE(&PHAR_G(phar_fname_map));
                                zend_hash_destroy(&(PHAR_G(phar_alias_map)));
-                               HT_FLAGS(&PHAR_G(phar_alias_map)) = 0;
+                               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));
@@ -171,8 +171,8 @@ finish_error:
        zend_hash_destroy(&cached_alias);
        cached_phars = PHAR_G(phar_fname_map);
        cached_alias = PHAR_G(phar_alias_map);
-       HT_FLAGS(&PHAR_G(phar_fname_map)) = 0;
-       HT_FLAGS(&PHAR_G(phar_alias_map)) = 0;
+       HT_INVALIDATE(&PHAR_G(phar_fname_map));
+       HT_INVALIDATE(&PHAR_G(phar_alias_map));
        zend_hash_graceful_reverse_destroy(&EG(regular_list));
        memset(&EG(regular_list), 0, sizeof(HashTable));
        efree(tmp);
@@ -218,19 +218,19 @@ void phar_destroy_phar_data(phar_archive_data *phar) /* {{{ */
                phar->signature = NULL;
        }
 
-       if (HT_FLAGS(&phar->manifest)) {
+       if (HT_IS_INITIALIZED(&phar->manifest)) {
                zend_hash_destroy(&phar->manifest);
-               HT_FLAGS(&phar->manifest) = 0;
+               HT_INVALIDATE(&phar->manifest);
        }
 
-       if (HT_FLAGS(&phar->mounted_dirs)) {
+       if (HT_IS_INITIALIZED(&phar->mounted_dirs)) {
                zend_hash_destroy(&phar->mounted_dirs);
-               HT_FLAGS(&phar->mounted_dirs) = 0;
+               HT_INVALIDATE(&phar->mounted_dirs);
        }
 
-       if (HT_FLAGS(&phar->virtual_dirs)) {
+       if (HT_IS_INITIALIZED(&phar->virtual_dirs)) {
                zend_hash_destroy(&phar->virtual_dirs);
-               HT_FLAGS(&phar->virtual_dirs) = 0;
+               HT_INVALIDATE(&phar->virtual_dirs);
        }
 
        if (Z_TYPE(phar->metadata) != IS_UNDEF) {
@@ -3520,11 +3520,11 @@ PHP_RSHUTDOWN_FUNCTION(phar) /* {{{ */
        {
                phar_release_functions();
                zend_hash_destroy(&(PHAR_G(phar_alias_map)));
-               HT_FLAGS(&PHAR_G(phar_alias_map)) = 0;
+               HT_INVALIDATE(&PHAR_G(phar_alias_map));
                zend_hash_destroy(&(PHAR_G(phar_fname_map)));
-               HT_FLAGS(&PHAR_G(phar_fname_map)) = 0;
+               HT_INVALIDATE(&PHAR_G(phar_fname_map));
                zend_hash_destroy(&(PHAR_G(phar_persist_map)));
-               HT_FLAGS(&PHAR_G(phar_persist_map)) = 0;
+               HT_INVALIDATE(&PHAR_G(phar_persist_map));
                PHAR_G(phar_SERVER_mung_list) = 0;
 
                if (PHAR_G(cached_fp)) {
index 7538c49b3cb760cc180807264357b6dbdba59c7b..cd15e519e07c16fe76e3f0e10682360977b5160c 100644 (file)
@@ -497,7 +497,7 @@ carry_on:
                }
 
                return;
-       } else if (HT_FLAGS(&PHAR_G(phar_fname_map)) && NULL != (pphar = zend_hash_str_find_ptr(&(PHAR_G(phar_fname_map)), fname, fname_len))) {
+       } else if (HT_IS_INITIALIZED(&PHAR_G(phar_fname_map)) && NULL != (pphar = zend_hash_str_find_ptr(&(PHAR_G(phar_fname_map)), fname, fname_len))) {
                goto carry_on;
        } else if (PHAR_G(manifest_cached) && NULL != (pphar = zend_hash_str_find_ptr(&cached_phars, fname, fname_len))) {
                if (SUCCESS == phar_copy_on_write(&pphar)) {
index ac44dd0682012c7f0976f74e70f885473cb723ed..8f0db6ed65e367e39e8b1cd55f5a28062f6d916c 100644 (file)
@@ -106,7 +106,7 @@ php_url* phar_parse_url(php_stream_wrapper *wrapper, const char *filename, const
        if (mode[0] == 'w' || (mode[0] == 'r' && mode[1] == '+')) {
                phar_archive_data *pphar = NULL, *phar;
 
-               if (PHAR_G(request_init) && HT_FLAGS(&PHAR_G(phar_fname_map)) && NULL == (pphar = zend_hash_find_ptr(&(PHAR_G(phar_fname_map)), resource->host))) {
+               if (PHAR_G(request_init) && HT_IS_INITIALIZED(&PHAR_G(phar_fname_map)) && NULL == (pphar = zend_hash_find_ptr(&(PHAR_G(phar_fname_map)), resource->host))) {
                        pphar = NULL;
                }
                if (PHAR_G(readonly) && (!pphar || !pphar->is_data)) {
@@ -596,7 +596,7 @@ static int phar_wrapper_stat(php_stream_wrapper *wrapper, const char *url, int f
                php_url_free(resource);
                return SUCCESS;
        }
-       if (!HT_FLAGS(&phar->manifest)) {
+       if (!HT_IS_INITIALIZED(&phar->manifest)) {
                php_url_free(resource);
                return FAILURE;
        }
@@ -613,7 +613,7 @@ static int phar_wrapper_stat(php_stream_wrapper *wrapper, const char *url, int f
                return SUCCESS;
        }
        /* check for mounted directories */
-       if (HT_FLAGS(&phar->mounted_dirs) && zend_hash_num_elements(&phar->mounted_dirs)) {
+       if (HT_IS_INITIALIZED(&phar->mounted_dirs) && zend_hash_num_elements(&phar->mounted_dirs)) {
                zend_string *str_key;
 
                ZEND_HASH_FOREACH_STR_KEY(&phar->mounted_dirs, str_key) {
index 7721a4e37ccf87406047896fb4798108a055076e..6af4879c2d0264d2befd7fff51bbf9ae37333941 100644 (file)
@@ -920,7 +920,7 @@ phar_entry_info * phar_open_jit(phar_archive_data *phar, phar_entry_info *entry,
 
 PHP_PHAR_API int phar_resolve_alias(char *alias, size_t alias_len, char **filename, size_t *filename_len) /* {{{ */ {
        phar_archive_data *fd_ptr;
-       if (HT_FLAGS(&PHAR_G(phar_alias_map))
+       if (HT_IS_INITIALIZED(&PHAR_G(phar_alias_map))
                        && NULL != (fd_ptr = zend_hash_str_find_ptr(&(PHAR_G(phar_alias_map)), alias, alias_len))) {
                *filename = fd_ptr->fname;
                *filename_len = fd_ptr->fname_len;
@@ -1244,7 +1244,7 @@ phar_entry_info *phar_get_entry_info_dir(phar_archive_data *phar, char *path, si
                return NULL;
        }
 
-       if (!HT_FLAGS(&phar->manifest)) {
+       if (!HT_IS_INITIALIZED(&phar->manifest)) {
                return NULL;
        }
 
@@ -1289,7 +1289,7 @@ phar_entry_info *phar_get_entry_info_dir(phar_archive_data *phar, char *path, si
                }
        }
 
-       if (HT_FLAGS(&phar->mounted_dirs) && zend_hash_num_elements(&phar->mounted_dirs)) {
+       if (HT_IS_INITIALIZED(&phar->mounted_dirs) && zend_hash_num_elements(&phar->mounted_dirs)) {
                zend_string *str_key;
 
                ZEND_HASH_FOREACH_STR_KEY(&phar->mounted_dirs, str_key) {
index 9c9e3f6d68f78817f77dc20561732f1be053c2ca..bbafd8836e4c4a5c6117c6032cb3fbd843d943ee 100644 (file)
@@ -293,11 +293,11 @@ foundit:
        entry.is_persistent = mydata->is_persistent;
 #define PHAR_ZIP_FAIL_FREE(errmsg, save) \
                        zend_hash_destroy(&mydata->manifest); \
-                       HT_FLAGS(&mydata->manifest) = 0; \
+                       HT_INVALIDATE(&mydata->manifest); \
                        zend_hash_destroy(&mydata->mounted_dirs); \
-                       HT_FLAGS(&mydata->mounted_dirs) = 0; \
+                       HT_INVALIDATE(&mydata->mounted_dirs); \
                        zend_hash_destroy(&mydata->virtual_dirs); \
-                       HT_FLAGS(&mydata->virtual_dirs) = 0; \
+                       HT_INVALIDATE(&mydata->virtual_dirs); \
                        php_stream_close(fp); \
                        zval_ptr_dtor(&mydata->metadata); \
                        if (mydata->signature) { \
@@ -315,11 +315,11 @@ foundit:
                        return FAILURE;
 #define PHAR_ZIP_FAIL(errmsg) \
                        zend_hash_destroy(&mydata->manifest); \
-                       HT_FLAGS(&mydata->manifest) = 0; \
+                       HT_INVALIDATE(&mydata->manifest); \
                        zend_hash_destroy(&mydata->mounted_dirs); \
-                       HT_FLAGS(&mydata->mounted_dirs) = 0; \
+                       HT_INVALIDATE(&mydata->mounted_dirs); \
                        zend_hash_destroy(&mydata->virtual_dirs); \
-                       HT_FLAGS(&mydata->virtual_dirs) = 0; \
+                       HT_INVALIDATE(&mydata->virtual_dirs); \
                        php_stream_close(fp); \
                        zval_ptr_dtor(&mydata->metadata); \
                        if (mydata->signature) { \