]> granicus.if.org Git - php/commitdiff
PCRE cache is "thread-local"
authorDmitry Stogov <dmitry@zend.com>
Wed, 1 Nov 2017 12:13:49 +0000 (15:13 +0300)
committerDmitry Stogov <dmitry@zend.com>
Wed, 1 Nov 2017 12:13:49 +0000 (15:13 +0300)
ext/pcre/php_pcre.c

index ebf84c0c58c8132be19d30cd93e98d539fb042be..743908be50a9c07931b89f518a6ae52eca19d369 100644 (file)
@@ -592,17 +592,19 @@ PHPAPI pcre_cache_entry* pcre_get_compiled_regex_cache(zend_string *regex)
         * See bug #63180
         */
        if (!(GC_FLAGS(key) & IS_STR_PERMANENT)) {
-               pce = zend_hash_str_add_new_mem(&PCRE_G(pcre_cache),
-                               ZSTR_VAL(key), ZSTR_LEN(key), &new_entry, sizeof(pcre_cache_entry));
+               zend_string *str = zend_string_init(ZSTR_VAL(key), ZSTR_LEN(key), 1);
+
+               GC_MAKE_PERSISTENT_LOCAL(str);
 #if HAVE_SETLOCALE
                if (key != regex) {
                        zend_string_release(key);
                }
 #endif
-       } else {
-               pce = zend_hash_add_new_mem(&PCRE_G(pcre_cache), key, &new_entry, sizeof(pcre_cache_entry));
+               key = str;
        }
 
+       pce = zend_hash_add_new_mem(&PCRE_G(pcre_cache), key, &new_entry, sizeof(pcre_cache_entry));
+
        return pce;
 }
 /* }}} */