]> granicus.if.org Git - php/commitdiff
Fixed bug #76850 Exit code mangled by set locale/preg_match
authorAnatol Belski <ab@php.net>
Sat, 8 Sep 2018 19:35:23 +0000 (21:35 +0200)
committerAnatol Belski <ab@php.net>
Sat, 8 Sep 2018 19:35:23 +0000 (21:35 +0200)
ext/pcre/php_pcre.c

index b9213d4909f5cc0e36292c2115ed465a2e0d67db..3910b41fea94a75b9aad1802fdf1422ce9ae1441 100644 (file)
@@ -729,6 +729,7 @@ PHPAPI pcre_cache_entry* pcre_get_compiled_regex_cache(zend_string *regex)
        if (key != regex) {
                tables = (uint8_t *)zend_hash_find_ptr(&char_tables, BG(locale_string));
                if (!tables) {
+                       zend_string *_k;
                        tables = pcre2_maketables(gctx);
                        if (UNEXPECTED(!tables)) {
                                php_error_docref(NULL,E_WARNING, "Failed to generate locale character tables");
@@ -737,7 +738,9 @@ PHPAPI pcre_cache_entry* pcre_get_compiled_regex_cache(zend_string *regex)
                                efree(pattern);
                                return NULL;
                        }
-                       zend_hash_add_ptr(&char_tables, BG(locale_string), (void *)tables);
+                       _k = zend_string_dup(BG(locale_string), 1);
+                       zend_hash_add_ptr(&char_tables, _k, (void *)tables);
+                       zend_string_release(_k);
                }
                pcre2_set_character_tables(cctx, tables);
        }