Commit graph

499 commits

Author SHA1 Message Date
Anatol Belski
0630e3bc03 Reduce error buffer size
120 bytes is ample, the doc says.
2018-07-05 17:24:38 +02:00
Anatol Belski
ff8f2710f6 Check return value of pcre2_maketables() 2018-06-29 19:15:38 +02:00
Anatol Belski
aa92d42018 If there's no setlocale, char tables are not used 2018-06-22 17:31:26 +02:00
Anatol Belski
8b58b2aac6 Don't discard char tables just generated 2018-06-22 15:18:39 +02:00
Anatol Belski
684ce24eec Improve locale character tables handling and reduce pattern cache size
If a locale other than C is active, character tables are saved into the
compile context. Every compiled pattern will have a pointer to the
character table, that was present in the context at the time of the
pattern compilation. Thus, the cache entries don't need to carry char
tables pointer, which reduces their size to 8 bytes on 64-bit. Instead,
the generated character tables are tracked in a separate HashTable. If a
character table was generated before, it'll be assigned to the compile
context when the locale changes. Otherwise a new char table will be
generated and cached.
2018-06-22 14:45:29 +02:00
Anatol Belski
bb2f1a6830 Fixed bug #76514 Regression in preg_match makes it fail with PREG_JIT_STACKLIMIT_ERROR
Looks like some patterns might require more stack for JIT execution. It
is a regression, as the same pattern was passing using JIT.
2018-06-22 11:05:30 +02:00
Christoph M. Becker
71d16feebb Fix #76512: \w no longer includes unicode characters
The migration from PCRE to PCRE2 missed to rename once occurrence of
`PCRE_UCP` to `PCRE2_UCP`.  We fix that.  We also revert the changes to
bug52971.phpt which had been incorrectly made in commit a5bc5ae[1].

[1] <http://git.php.net/?p=php-src.git;a=commit;h=a5bc5aed71f7a15f14f33bb31b8e17bf5f327e2d>
2018-06-21 22:45:08 +02:00
Dmitry Stogov
5eb1f92f31 Use zend_string_release_ex() instread of zend_string_release() in places, where we sure about string persistence. 2018-05-28 16:27:12 +03:00
Anatol Belski
28132878f2 Reduce var scope 2018-02-17 13:02:49 +01:00
Xinchen Hui
a6519d0514 year++ 2018-01-02 12:57:58 +08:00
Dmitry Stogov
856ad54f45 Use zend_hash_find() instead of zend_hash_find_ptr() to avoid double check 2017-12-27 13:25:21 +03:00
Michael Moravec
84235344f9 Fixed bug #75355: preg_quote() does not quote # control character 2017-12-16 17:34:41 +01:00
Anatol Belski
9c8ffbf1af Merge branch 'PHP-7.2'
* PHP-7.2:
  Fix use after free revealed by phpdbg
2017-12-05 18:35:16 +01:00
Anatol Belski
d4af204637 Merge branch 'PHP-7.1' into PHP-7.2
* PHP-7.1:
  Fix use after free revealed by phpdbg
2017-12-05 18:34:39 +01:00
Anatol Belski
092fd44474 Fix use after free revealed by phpdbg 2017-12-05 18:32:32 +01:00
Anatol Belski
9cca85ff07 Fixed bug #75601 Thread race in PCRE JIT support 2017-12-05 17:41:08 +01:00
Anatol Belski
75a2ee7f7b Fixed bug #75601 Thread race in PCRE JIT support 2017-12-05 17:40:00 +01:00
Anatol Belski
31b2b14a71 Fixed bug #75601 Thread race in PCRE JIT support 2017-12-05 17:38:18 +01:00
Anatol Belski
c029bd3342 Fix macro name 2017-11-21 20:27:17 +01:00
Anatol Belski
54e7b0a6f7 Merge branch 'PHP-7.2'
* PHP-7.2:
  Fixed #75539 and #74183 - preg_last_error not returning error code after error
2017-11-21 20:15:30 +01:00
Anatol Belski
f6b0d365a7 Merge branch 'PHP-7.1' into PHP-7.2
* PHP-7.1:
  Fixed #75539 and #74183 - preg_last_error not returning error code after error
2017-11-21 20:11:21 +01:00
Anatol Belski
f5c0754f6e Merge branch 'PHP-7.0' into PHP-7.1
* PHP-7.0:
  Fixed #75539 and #74183 - preg_last_error not returning error code after error
2017-11-21 20:10:49 +01:00
Nester
8fdef981ef Fixed #75539 and #74183 - preg_last_error not returning error code after error 2017-11-21 20:10:18 +01:00
David Carlier
d006270040 seemingly a tiny typo error in pcre module. 2017-11-21 12:28:15 +01:00
Nikita Popov
26f8fc833b Enable and fix printf() format warnings
Add _unchecked() variants of zend_spprintf and zend_strpprintf for
cases where we specifically want to disable these checks, such as
use of %H.
2017-11-16 21:15:36 +01:00
Dmitry Stogov
73bde7bbd0 Merge branch 'master' of git.php.net:php-src
* 'master' of git.php.net:php-src:
  Fix (*NO_JIT) usage when JIT is enabled
  Refactor ASCII to wide conversion
2017-11-16 17:10:04 +03:00
Dmitry Stogov
ccc12b82da Avoid unnecessary reference-counting on strings. 2017-11-16 17:09:32 +03:00
Anatol Belski
a370a6af64 Fix (*NO_JIT) usage when JIT is enabled
If (*NO_JIT) is put into the pattern, the JIT compilation will still
succeed but produce no code. The pattern will still have to be
interpreted and is not suitable for the JIT fast path. This means,
we still need to check the pattern info after JIT compilation and only
set the flags when the JIT code was produced.
2017-11-16 14:12:05 +01:00
Anatol Belski
ce85d0f24f Add missing ifdef 2017-11-15 20:21:40 +01:00
Anatol Belski
691a5a9c4c Initialize jit global 2017-11-14 21:47:56 +01:00
Anatol Belski
91407fb82d Fix wrong return 2017-11-14 21:44:46 +01:00
Anatol Belski
13696d7aae Use already available pattern length, fix signedness warnings 2017-11-14 16:36:33 +01:00
Anatol Belski
a385993c0c Merge branch 'PHP-7.2'
* PHP-7.2:
  Fix UTF check in pcre_grep
2017-11-14 13:56:25 +01:00
Anatol Belski
0d13323915 Fix UTF check in pcre_grep
In this case it loops through different subjects without looking for sub
matches and matches are done against the same pattern. Thus, don't reset
the UTF check flag but use it to check whether JIT should be used and
otherwise let PCRE to do the job according to what was saved into the
pattern.
2017-11-14 13:49:06 +01:00
Anatol Belski
0618d7d2ee Merge branch 'PHP-7.2'
* PHP-7.2:
  Fix uninitialized flag when JIT is disabled
2017-11-14 10:14:09 +01:00
Anatol Belski
3c241ea326 Fix uninitialized flag when JIT is disabled 2017-11-14 10:12:55 +01:00
Xinchen Hui
266f19babb Added PCRE_JIT_SUPPORT flag 2017-11-14 11:02:16 +08:00
Anatol Belski
e8ac7d8dd5 Fix calculation as sync with 48cee6d1 2017-11-14 00:01:52 +01:00
Dmitry Stogov
81dd6de3a9 Eliminated redundand code 2017-11-14 01:43:54 +03:00
Dmitry Stogov
48cee6d1e9 We don't need to calculate size of offset array, because pcre2_match_data_create() already takes size in pairs. 2017-11-14 00:49:03 +03:00
Anatol Belski
f4edd0899f Put hardcoded value into macro 2017-11-13 21:33:13 +01:00
Anatol Belski
a5bc5aed71 Patch core for PCRE2 support
RFC https://wiki.php.net/rfc/pcre2-migration
2017-11-13 19:37:38 +01:00
Dmitry Stogov
f5664a1492 PCRE cache is "thread-local" 2017-11-01 15:13:49 +03:00
Xinchen Hui
a8a17a72b0 RC manipulation cleanup 2017-11-01 10:25:10 +08:00
Dmitry Stogov
160f6d6267 single check is enough 2017-10-31 11:07:42 +03:00
Dmitry Stogov
2e83924682 Added zend_hash_add_new_mem/zend_hash_str_add_new_mem. Use them to add new elements into PCRE cache (we checked the existance before). 2017-10-31 10:43:10 +03:00
Dmitry Stogov
ef90e37bd1 Fixed bug #75089 (preg_grep() is not reporting PREG_BAD_UTF8_ERROR after first input string) 2017-08-18 14:56:28 +03:00
Anatol Belski
8a287c0ea0 Upgrade bundled PCRE to 8.41
HEADSUP! With PCRE 8.39 the JIT related code was changed in the way,
that additional valgrind options became almost unavoidable. Valgrind
had it already sometimes hard with JIT, now there are seem to be more
cases requiring special valgrind options.

For this reason, the new configure option --with-pcre-valgrind was
introduced. The option is development/debugging only and turns on the
Valgrind related pieces in PCRE, so then false positives are avoided
to the big part. In addition, run-tests.php was added a new valgrind
option, when the leak check is enabled and the test filepath contains
pcre.

Thus, to debug the code related to PCRE with JIT enabled, two things
would likely make sense

  - configure --with-pcre-valgrind
  - valgrind option --smc-check=all if run-tests.php is not used

The checks so far reveal no new issues.
2017-07-11 17:01:59 +02:00
Dmitry Stogov
29653da385 Fixed bug #74873 (Minor BC break: PCRE_JIT changes output of preg_match()). 2017-07-07 09:54:21 +03:00
Dmitry Stogov
f626a783b6 Avoid string duplication in preg_split() 2017-06-28 00:43:55 +03:00