mirror of
https://github.com/php/php-src.git
synced 2026-04-06 07:32:54 +02:00
Fixed bug #63180 (Corruption of hash tables)
This commit is contained in:
1
NEWS
1
NEWS
@@ -20,6 +20,7 @@ PHP NEWS
|
||||
(Chris Jones)
|
||||
|
||||
- PCRE:
|
||||
. Fixed bug #63180 (Corruption of hash tables). (Dmitry)
|
||||
. Fixed bug #63055 (Segfault in zend_gc with SF2 testsuite).
|
||||
(Dmitry, Laruence)
|
||||
. Fixed bug #63284 (Upgrade PCRE to 8.31). (Anatoliy)
|
||||
|
||||
@@ -248,6 +248,7 @@ PHPAPI pcre_cache_entry* pcre_get_compiled_regex_cache(char *regex, int regex_le
|
||||
#endif
|
||||
pcre_cache_entry *pce;
|
||||
pcre_cache_entry new_entry;
|
||||
char *tmp = NULL;
|
||||
|
||||
/* Try to lookup the cached regex entry, and if successful, just pass
|
||||
back the compiled pattern, otherwise go on and compile it. */
|
||||
@@ -438,9 +439,26 @@ PHPAPI pcre_cache_entry* pcre_get_compiled_regex_cache(char *regex, int regex_le
|
||||
new_entry.locale = pestrdup(locale, 1);
|
||||
new_entry.tables = tables;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Interned strings are not duplicated when stored in HashTable,
|
||||
* but all the interned strings created during HTTP request are removed
|
||||
* at end of request. However PCRE_G(pcre_cache) must be consistent
|
||||
* on the next request as well. So we disable usage of interned strings
|
||||
* as hash keys especually for this table.
|
||||
* See bug #63180
|
||||
*/
|
||||
if (IS_INTERNED(regex)) {
|
||||
regex = tmp = estrndup(regex, regex_len);
|
||||
}
|
||||
|
||||
zend_hash_update(&PCRE_G(pcre_cache), regex, regex_len+1, (void *)&new_entry,
|
||||
sizeof(pcre_cache_entry), (void**)&pce);
|
||||
|
||||
if (tmp) {
|
||||
efree(tmp);
|
||||
}
|
||||
|
||||
return pce;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
Reference in New Issue
Block a user