blob: 856250f14e344be4c654b2953bfda8684c6b120a [file] [log] [blame]
Elliott Hughes5b808042021-10-01 10:56:10 -07001Change Log for PCRE2
2--------------------
3
Elliott Hughes4e19c8e2022-04-15 15:11:02 -07004
5Version 10.40 15-April-2022
6---------------------------
7
81. Merged patch from @carenas (GitHub #35, 7db87842) to fix pcre2grep incorrect
9handling of multiple passes.
10
112. Merged patch from @carenas (GitHub #36, dae47509) to fix portability issue
12in pcre2grep with buffered fseek(stdin).
13
143. Merged patch from @carenas (GitHub #37, acc520924) to fix tests when -S is
15not supported.
16
174. Revert an unintended change in JIT repeat detection.
18
195. Merged patch from @carenas (GitHub #52, b037bfa1) to fix build on GNU Hurd.
20
216. Merged documentation and comments patches from @carenas (GitHub #47).
22
237. Merged patch from @carenas (GitHub #49) to remove obsolete JFriedl test code
24from pcre2grep.
25
268. Merged patch from @carenas (GitHub #48) to fix CMake install issue #46.
27
289. Merged patch from @carenas (GitHub #53) fixing NULL checks in matching and
29substituting.
30
3110. Add null_subject and null_replacement modifiers to pcre2test.
32
3311. Add check for NULL subject to POSIX regexec() function.
34
3512. Add check for NULL replacement to pcre2_substitute().
36
3713. For the subject arguments of pcre2_match(), pcre2_dfa_match(), and
38pcre2_substitute(), and the replacement argument of the latter, if the pointer
39is NULL and the length is zero, treat as an empty string. Apparently a number
40of applications treat NULL/0 in this way.
41
4214. Added support for Bidi_Class and a number of binary Unicode properties,
43including Bidi_Control.
44
4515. Fix some minor issues raised by clang sanitize.
46
4716. Very minor code speed up for maximizing character property matches.
48
4917. A number of changes to script matching for \p and \P:
50
51 (a) Script extensions for a character are now coded as a bitmap instead of
52 a list of script numbers, which should be faster and does not need a
53 loop.
54
55 (b) Added the syntax \p{script:xxx} and \p{script_extensions:xxx} (synonyms
56 sc and scx).
57
58 (c) Changed \p{scriptname} from being the same as \p{sc:scriptname} to being
59 the same as \p{scx:scriptname} because this change happened in Perl at
60 release 5.26.
61
62 (d) The standard Unicode 4-letter abbreviations for script names are now
63 recognized.
64
65 (e) In accordance with Unicode and Perl's "loose matching" rules, spaces,
66 hyphens, and underscores are ignored in property names, which are then
67 matched independent of case.
68
6918. The Python scripts in the maint directory have been refactored. There are
70now three scripts that generate pcre2_ucd.c, pcre2_ucp.h, and pcre2_ucptables.c
71(which is #included by pcre2_tables.c). The data lists that used to be
72duplicated are now held in a single common Python module.
73
7419. On CHERI, and thus Arm's Morello prototype, pointers are represented as
75hardware capabilities, which consist of both an integer address and additional
76metadata, meaning they are twice the size of the platform's size_t type, i.e.
7716 bytes on a 64-bit system. The ovector member of heapframe happens to only be
788 byte aligned, and so computing frame_size ended up with a multiple of 8 but
79not 16. Whilst the first frame was always suitably aligned, this then
80misaligned the frame that follows, resulting in an alignment fault when storing
81a pointer to Fecode at the start of match. Patch to fix this issue by Jessica
82Clarke PR#72.
83
8420. Added -LP and -LS listing options to pcre2test.
85
8621. A user discovered that the library names in CMakeLists.txt for MSVC
87debugger (PDB) files were incorrect - perhaps never tried for PCRE2?
88
8922. An item such as [Aa] is optimized into a caseless single character match.
90When this was quantified (e.g. [Aa]{2}) and was also the last literal item in a
91pattern, the optimizing "must be present for a match" character check was not
92being flagged as caseless, causing some matches that should have succeeded to
93fail.
94
9523. Fixed a unicode properrty matching issue in JIT. The character was not
96fully read in caseless matching.
97
9824. Fixed an issue affecting recursions in JIT caused by duplicated data
99transfers.
100
10125. Merged patch from @carenas (GitHub #96) which fixes some problems with
102pcre2test and readline/readedit:
103
104 * Use the right header for libedit in FreeBSD with autoconf
105 * Really allow libedit with cmake
106 * Avoid using readline headers with libedit
107
108
Elliott Hughes16619d62021-10-29 12:10:38 -0700109Version 10.39 29-October-2021
110-----------------------------
111
1121. Fix incorrect detection of alternatives in first character search in JIT.
113
1142. Merged patch from @carenas (GitHub #28):
115
116 Visual Studio 2013 includes support for %zu and %td, so let newer
117 versions of it avoid the fallback, and while at it, make sure that
118 the first check is for DISABLE_PERCENT_ZT so it will be always
119 honoured if chosen.
120
121 prtdiff_t is signed, so use a signed type instead, and make sure
122 that an appropiate width is chosen if pointers are 64bit wide and
123 long is not (ex: Windows 64bit).
124
125 IMHO removing the cast (and therefore the positibilty of truncation)
126 make the code cleaner and the fallback is likely portable enough
127 with all 64-bit POSIX systems doing LP64 except for Windows.
128
1293. Merged patch from @carenas (GitHub #29) to update to Unicode 14.0.0.
130
1314. Merged patch from @carenas (GitHub #30):
132
133 * Cleanup: remove references to no longer used stdint.h
134
135 Since 19c50b9d (Unconditionally use inttypes.h instead of trying for stdint.h
136 (simplification) and remove the now unnecessary inclusion in
137 pcre2_internal.h., 2018-11-14), stdint.h is no longer used.
138
139 Remove checks for it in autotools and CMake and document better the expected
140 build failures for systems that might have stdint.h (C99) and not inttypes.h
141 (from POSIX), like old Windows.
142
143 * Cleanup: remove detection for inttypes.h which is a hard dependency
144
145 CMake checks for standard headers are not meant to be used for hard
146 dependencies, so will prevent a possible fallback to work.
147
148 Alternatively, the header could be checked to make the configuration fail
149 instead of breaking the build, but that was punted, as it was missing anyway
150 from autotools.
151
1525. Merged patch from @carenas (GitHub #32):
153
154 * jit: allow building with ancient MSVC versions
155
156 Visual Studio older than 2013 fails to build with JIT enabled, because it is
157 unable to parse non C89 compatible syntax, with mixed declarations and code.
158 While most recent compilers wouldn't even report this as a warning since it
159 is valid C99, it could be also made visible by adding to gcc/clang the
160 -Wdeclaration-after-statement flag at build time.
161
162 Move the code below the affected definitions.
163
164 * pcre2grep: avoid mixing declarations with code
165
166 Since d5a61ee8 (Patch to detect (and ignore) symlink loops in pcre2grep,
167 2021-08-28), code will fail to build in a strict C89 compiler.
168
169 Reformat slightly to make it C89 compatible again.
170
171
Elliott Hughes5b808042021-10-01 10:56:10 -0700172Version 10.38 01-October-2021
173-----------------------------
174
1751. Fix invalid single character repetition issues in JIT when the repetition
176is inside a capturing bracket and the bracket is preceeded by character
177literals.
178
1792. Installed revised CMake configuration files provided by Jan-Willem Blokland.
180This extends the CMake build system to build both static and shared libraries
181in one go, builds the static library with PIC, and exposes PCRE2 libraries
182using the CMake config files. JWB provided these notes:
183
184- Introduced CMake variable BUILD_STATIC_LIBS to build the static library.
185
186- Make a small modification to config-cmake.h.in by removing the PCRE2_STATIC
187 variable. Added PCRE2_STATIC variable to the static build using the
188 target_compile_definitions() function.
189
190- Extended the CMake config files.
191
192 - Introduced CMake variable PCRE2_USE_STATIC_LIBS to easily switch between
193 the static and shared libraries.
194
195 - Added the PCRE_STATIC variable to the target compile definitions for the
196 import of the static library.
197
198Building static and shared libraries using MSVC results in a name clash of
199the libraries. Both static and shared library builds create, for example, the
200file pcre2-8.lib. Therefore, I decided to change the static library names by
201adding "-static". For example, pcre2-8.lib has become pcre2-8-static.lib.
202[Comment by PH: this is MSVC-specific. It doesn't happen on Linux.]
203
2043. Increased the minimum release number for CMake to 3.0.0 because older than
2052.8.12 is deprecated (it was set to 2.8.5) and causes warnings. Even 3.0.0 is
206quite old; it was released in 2014.
207
2084. Implemented a modified version of Thomas Tempelmann's pcre2grep patch for
209detecting symlink loops. This is dependent on the availability of realpath(),
210which is now tested for in ./configure and CMakeLists.txt.
211
2125. Implemented a modified version of Thomas Tempelmann's patch for faster
213case-independent "first code unit" searches for unanchored patterns in 8-bit
214mode in the interpreters. Instead of just remembering whether one case matched
215or not, it remembers the position of a previous match so as to avoid
216unnecessary repeated searching.
217
2186. Perl now locks out \K in lookarounds, so PCRE2 now does the same by default.
219However, just in case anybody was relying on the old behaviour, there is an
220option called PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK that enables the old behaviour.
221An option has also been added to pcre2grep to enable this.
222
2237. Re-enable a JIT optimization which was unintentionally disabled in 10.35.
224
2258. There is a loop counter to catch excessively crazy patterns when checking
226the lengths of lookbehinds at compile time. This was incorrectly getting reset
227whenever a lookahead was processed, leading to some fuzzer-generated patterns
228taking a very long time to compile when (?|) was present in the pattern,
229because (?|) disables caching of group lengths.
230
231
232Version 10.37 26-May-2021
233-------------------------
234
2351. Change RunGrepTest to use tr instead of sed when testing with binary
236zero bytes, because sed varies a lot from system to system and has problems
237with binary zeros. This is from Bugzilla #2681. Patch from Jeremie
238Courreges-Anglas via Nam Nguyen. This fixes RunGrepTest for OpenBSD. Later:
239it broke it for at least one version of Solaris, where tr can't handle binary
240zeros. However, that system had /usr/xpg4/bin/tr installed, which works OK, so
241RunGrepTest now checks for that command and uses it if found.
242
2432. Compiling with gcc 10.2's -fanalyzer option showed up a hypothetical problem
244with a NULL dereference. I don't think this case could ever occur in practice,
245but I have put in a check in order to get rid of the compiler error.
246
2473. An alternative patch for CMakeLists.txt because 10.36 #4 breaks CMake on
248Windows. Patch from email@cs-ware.de fixes bugzilla #2688.
249
2504. Two bugs related to over-large numbers have been fixed so the behaviour is
251now the same as Perl.
252
253 (a) A pattern such as /\214748364/ gave an overflow error instead of being
254 treated as the octal number \214 followed by literal digits.
255
256 (b) A sequence such as {65536 that has no terminating } so is not a
257 quantifier was nevertheless complaining that a quantifier number was too big.
258
2595. A run of autoconf suggested that configure.ac was out-of-date with respect
260to the lastest autoconf. Running autoupdate made some valid changes, some valid
261suggestions, and also some invalid changes, which were fixed by hand. Autoconf
262now runs clean and the resulting "configure" seems to work, so I hope nothing
263is broken. Later: the requirement for autoconf 2.70 broke some automatic test
264robots. It doesn't seem to be necessary: trying a reduction to 2.60.
265
2666. The pattern /a\K.(?0)*/ when matched against "abac" by the interpreter gave
267the answer "bac", whereas Perl and JIT both yield "c". This was because the
268effect of \K was not propagating back from the full pattern recursion. Other
269recursions such as /(a\K.(?1)*)/ did not have this problem.
270
2717. Restore single character repetition optimization in JIT. Currently fewer
272character repetitions are optimized than in 10.34.
273
2748. When the names of the functions in the POSIX wrapper were changed to
275pcre2_regcomp() etc. (see change 10.33 #4 below), functions with the original
276names were left in the library so that pre-compiled programs would still work.
277However, this has proved troublesome when programs link with several libraries,
278some of which use PCRE2 via the POSIX interface while others use a native POSIX
279library. For this reason, the POSIX function names are removed in this release.
280The macros in pcre2posix.h should ensure that re-compiling fixes any programs
281that haven't been compiled since before 10.33.
282
283
284Version 10.36 04-December-2020
285------------------------------
286
2871. Add CET_CFLAGS so that when Intel CET is enabled, pass -mshstk to
288compiler. This fixes https://bugs.exim.org/show_bug.cgi?id=2578. Patch for
289Makefile.am and configure.ac by H.J. Lu. Equivalent patch for CMakeLists.txt
290invented by PH.
291
2922. Fix inifinite loop when a single byte newline is searched in JIT when
293invalid utf8 mode is enabled.
294
2953. Updated CMakeLists.txt with patch from Wolfgang Stöggl (Bugzilla #2584):
296
297 - Include GNUInstallDirs and use ${CMAKE_INSTALL_LIBDIR} instead of hardcoded
298 lib. This allows differentiation between lib and lib64.
299 CMAKE_INSTALL_LIBDIR is used for installation of libraries and also for
300 pkgconfig file generation.
301
302 - Add the version of PCRE2 to the configuration summary like ./configure
303 does.
304
305 - Fix typo: MACTHED_STRING->MATCHED_STRING
306
3074. Updated CMakeLists.txt with another patch from Wolfgang Stöggl (Bugzilla
308#2588):
309
310 - Add escaped double quotes around include directory in CMakeLists.txt to
311 allow spaces in directory names.
312
313 - This fixes a cmake error, if the path of the pcre2 source contains a space.
314
3155. Updated CMakeLists.txt with a patch from B. Scott Michel: CMake's
316documentation suggests using CHECK_SYMBOL_EXISTS over CHECK_FUNCTION_EXIST.
317Moreover, these functions come from specific header files, which need to be
318specified (and, thankfully, are the same on both the Linux and WinXX
319platforms.)
320
3216. Added a (uint32_t) cast to prevent a compiler warning in pcre2_compile.c.
322
3237. Applied a patch from Wolfgang Stöggl (Bugzilla #2600) to fix postfix for
324debug Windows builds using CMake. This also updated configure so that it
325generates *.pc files and pcre2-config with the same content, as in the past.
326
3278. If a pattern ended with (?(VERSION=n.d where n is any number but d is just a
328single digit, the code unit beyond d was being read (i.e. there was a read
329buffer overflow). Fixes ClusterFuzz 23779.
330
3319. After the rework in r1235, certain character ranges were incorrectly
332handled by an optimization in JIT. Furthermore a wrong offset was used to
333read a value from a buffer which could lead to memory overread.
334
33510. Unnoticed for many years was the fact that delimiters other than / in the
336testinput1 and testinput4 files could cause incorrect behaviour when these
337files were processed by perltest.sh. There were several tests that used quotes
338as delimiters, and it was just luck that they didn't go wrong with perltest.sh.
339All the patterns in testinput1 and testinput4 now use / as their delimiter.
340This fixes Bugzilla #2641.
341
34211. Perl has started to give an error for \K within lookarounds (though there
343are cases where it doesn't). PCRE2 still allows this, so the tests that include
344this case have been moved from test 1 to test 2.
345
34612. Further to 10 above, pcre2test has been updated to detect and grumble if a
347delimiter other than / is used after #perltest.
348
34913. Fixed a bug with PCRE2_MATCH_INVALID_UTF in 8-bit mode when PCRE2_CASELESS
350was set and PCRE2_NO_START_OPTIMIZE was not set. The optimization for finding
351the start of a match was not resetting correctly after a failed match on the
352first valid fragment of the subject, possibly causing incorrect "no match"
353returns on subsequent fragments. For example, the pattern /A/ failed to match
354the subject \xe5A. Fixes Bugzilla #2642.
355
35614. Fixed a bug in character set matching when JIT is enabled and both unicode
357scripts and unicode classes are present at the same time.
358
35915. Added GNU grep's -m (aka --max-count) option to pcre2grep.
360
36116. Refactored substitution processing in pcre2grep strings, both for the -O
362option and when dealing with callouts. There is now a single function that
363handles $ expansion in all cases (instead of multiple copies of almost
364identical code). This means that the same escape sequences are available
365everywhere, which was not previously the case. At the same time, the escape
366sequences $x{...} and $o{...} have been introduced, to allow for characters
367whose code points are greater than 255 in Unicode mode.
368
36917. Applied the patch from Bugzilla #2628 to RunGrepTest. This does an explicit
370test for a version of sed that can handle binary zero, instead of assuming that
371any Linux version will work. Later: replaced $(...) by `...` because not all
372shells recognize the former.
373
37418. Fixed a word boundary check bug in JIT when partial matching is enabled.
375
37619. Fix ARM64 compilation warning in JIT. Patch by Carlo.
377
37820. A bug in the RunTest script meant that if the first part of test 2 failed,
379the failure was not reported.
380
38121. Test 2 was failing when run from a directory other than the source
382directory. This failure was previously missed in RunTest because of 20 above.
383Fixes added to both RunTest and RunTest.bat.
384
38522. Patch to CMakeLists.txt from Daniel to fix problem with testing under
386Windows.
387
388
389Version 10.35 09-May-2020
390---------------------------
391
3921. Use PCRE2_MATCH_EMPTY flag to detect empty matches in JIT.
393
3942. Fix ARMv5 JIT improper handling of labels right after a constant pool.
395
3963. A JIT bug is fixed which allowed to read the fields of the compiled
397pattern before its existence is checked.
398
3994. Back in the PCRE1 day, capturing groups that contained recursive back
400references to themselves were made atomic (version 8.01, change 18) because
401after the end a repeated group, the captured substrings had their values from
402the final repetition, not from an earlier repetition that might be the
403destination of a backtrack. This feature was documented, and was carried over
404into PCRE2. However, it has now been realized that the major refactoring that
405was done for 10.30 has made this atomicizing unnecessary, and it is confusing
406when users are unaware of it, making some patterns appear not to be working as
407expected. Capture values of recursive back references in repeated groups are
408now correctly backtracked, so this unnecessary restriction has been removed.
409
4105. Added PCRE2_SUBSTITUTE_LITERAL.
411
4126. Avoid some VS compiler warnings.
413
4147. Added PCRE2_SUBSTITUTE_MATCHED.
415
4168. Added (?* and (?<* as synonms for (*napla: and (*naplb: to match another
417regex engine. The Perl regex folks are aware of this usage and have made a note
418about it.
419
4209. When an assertion is repeated, PCRE2 used to limit the maximum repetition to
4211, believing that repeating an assertion is pointless. However, if a positive
422assertion contains capturing groups, repetition can be useful. In any case, an
423assertion could always be wrapped in a repeated group. The only restriction
424that is now imposed is that an unlimited maximum is changed to one more than
425the minimum.
426
42710. Fix *THEN verbs in lookahead assertions in JIT.
428
42911. Added PCRE2_SUBSTITUTE_REPLACEMENT_ONLY.
430
43112. The JIT stack should be freed when the low-level stack allocation fails.
432
43313. In pcre2grep, if the final line in a scanned file is output but does not
434end with a newline sequence, add a newline according to the --newline setting.
435
43614. (?(DEFINE)...) groups were not being handled correctly when checking for
437the fixed length of a lookbehind assertion. Such a group within a lookbehind
438should be skipped, as it does not contribute to the length of the group.
439Instead, the (DEFINE) group was being processed, and if at the end of the
440lookbehind, that end was not correctly recognized. Errors such as "lookbehind
441assertion is not fixed length" and also "internal error: bad code value in
442parsed_skip()" could result.
443
44415. Put a limit of 1000 on recursive calls in pcre2_study() when searching
445nested groups for starting code units, in order to avoid stack overflow issues.
446If the limit is reached, it just gives up trying for this optimization.
447
44816. The control verb chain list must always be restored when exiting from a
449recurse function in JIT.
450
45117. Fix a crash which occurs when the character type of an invalid UTF
452character is decoded in JIT.
453
45418. Changes in many areas of the code so that when Unicode is supported and
455PCRE2_UCP is set without PCRE2_UTF, Unicode character properties are used for
456upper/lower case computations on characters whose code points are greater than
457127.
458
45919. The function for checking UTF-16 validity was returning an incorrect offset
460for the start of the error when a high surrogate was not followed by a valid
461low surrogate. This caused incorrect behaviour, for example when
462PCRE2_MATCH_INVALID_UTF was set and a match started immediately following the
463invalid high surrogate, such as /aa/ matching "\x{d800}aa".
464
46520. If a DEFINE group immediately preceded a lookbehind assertion, the pattern
466could be mis-compiled and therefore not match correctly. This is the example
467that found this: /(?(DEFINE)(?<foo>bar))(?<![-a-z0-9])word/ which failed to
468match "word" because the "move back" value was set to zero.
469
47021. Following a request from a user, some extensions and tidies to the
471character tables handling have been done:
472
473 (a) The dftables auxiliary program is renamed pcre2_dftables, but it is still
474 not installed for public use.
475
476 (b) There is now a -b option for pcre2_dftables, which causes the tables to
477 be written in binary. There is also a -help option.
478
479 (c) PCRE2_CONFIG_TABLES_LENGTH is added to pcre2_config() so that an
480 application that wants to save tables in binary knows how long they are.
481
48222. Changed setting of CMAKE_MODULE_PATH in CMakeLists.txt from SET to
483LIST(APPEND...) to allow a setting from the command line to be included.
484
48523. Updated to Unicode 13.0.0.
486
48724. CMake build now checks for secure_getenv() and strerror(). Patch by Carlo.
488
48925. Avoid using [-1] as a suffix in pcre2test because it can provoke a compiler
490warning.
491
49226. Added tests for __attribute__((uninitialized)) to both the configure and
493CMake build files, and then applied this attribute to the variable called
494stack_frames_vector[] in pcre2_match(). When implemented, this disables
495automatic initialization (a facility in clang), which can take time on big
496variables.
497
49827. Updated CMakeLists.txt (patches by Uwe Korn) to add support for
499pcre2-config, the libpcre*.pc files, SOVERSION, VERSION and the
500MACHO_*_VERSIONS settings for CMake builds.
501
50228. Another patch to CMakeLists.txt to check for mkostemp (configure already
503does). Patch by Carlo Marcelo Arenas Belon.
504
50529. Check for the existence of memfd_create in both CMake and configure
506configurations. Patch by Carlo Marcelo Arenas Belon.
507
50830. Restrict the configuration setting for the SELinux compatible execmem
509allocator (change 10.30/44) to Linux and NetBSD.
510
511
512Version 10.34 21-November-2019
513------------------------------
514
5151. The maximum number of capturing subpatterns is 65535 (documented), but no
516check on this was ever implemented. This omission has been rectified; it fixes
517ClusterFuzz 14376.
518
5192. Improved the invalid utf32 support of the JIT compiler. Now it correctly
520detects invalid characters in the 0xd800-0xdfff range.
521
5223. Fix minor typo bug in JIT compile when \X is used in a non-UTF string.
523
5244. Add support for matching in invalid UTF strings to the pcre2_match()
525interpreter, and integrate with the existing JIT support via the new
526PCRE2_MATCH_INVALID_UTF compile-time option.
527
5285. Give more error detail for invalid UTF-8 when detected in pcre2grep.
529
5306. Add support for invalid UTF-8 to pcre2grep.
531
5327. Adjust the limit for "must have" code unit searching, in particular,
533increase it substantially for non-anchored patterns.
534
5358. Allow (*ACCEPT) to be quantified, because an ungreedy quantifier with a zero
536minimum is potentially useful.
537
5389. Some changes to the way the minimum subject length is handled:
539
540 * When PCRE2_NO_START_OPTIMIZE is set, no minimum length is computed;
541 pcre2test now omits this item instead of showing a value of zero.
542
543 * An incorrect minimum length could be calculated for a pattern that
544 contained (*ACCEPT) inside a qualified group whose minimum repetition was
545 zero, for example /A(?:(*ACCEPT))?B/, which incorrectly computed a minimum
546 of 2. The minimum length scan no longer happens for a pattern that
547 contains (*ACCEPT).
548
549 * When no minimum length is set by the normal scan, but a first and/or last
550 code unit is recorded, set the minimum to 1 or 2 as appropriate.
551
552 * When a pattern contains multiple groups with the same number, a back
553 reference cannot know which one to scan for a minimum length. This used to
554 cause the minimum length finder to give up with no result. Now it treats
555 such references as not adding to the minimum length (which it should have
556 done all along).
557
558 * Furthermore, the above action now happens only if the back reference is to
559 a group that exists more than once in a pattern instead of any back
560 reference in a pattern with duplicate numbers.
561
56210. A (*MARK) value inside a successful condition was not being returned by the
563interpretive matcher (it was returned by JIT). This bug has been mended.
564
56511. A bug in pcre2grep meant that -o without an argument (or -o0) didn't work
566if the pattern had more than 32 capturing parentheses. This is fixed. In
567addition (a) the default limit for groups requested by -o<n> has been raised to
56850, (b) the new --om-capture option changes the limit, (c) an error is raised
569if -o asks for a group that is above the limit.
570
57112. The quantifier {1} was always being ignored, but this is incorrect when it
572is made possessive and applied to an item in parentheses, because a
573parenthesized item may contain multiple branches or other backtracking points,
574for example /(a|ab){1}+c/ or /(a+){1}+a/.
575
57613. For partial matches, pcre2test was always showing the maximum lookbehind
577characters, flagged with "<", which is misleading when the lookbehind didn't
578actually look behind the start (because it was later in the pattern). Showing
579all consulted preceding characters for partial matches is now controlled by the
580existing "allusedtext" modifier and, as for complete matches, this facility is
581available only for non-JIT matching, because JIT does not maintain the first
582and last consulted characters.
583
58414. DFA matching (using pcre2_dfa_match()) was not recognising a partial match
585if the end of the subject was encountered in a lookahead (conditional or
586otherwise), an atomic group, or a recursion.
587
58815. Give error if pcre2test -t, -T, -tm or -TM is given an argument of zero.
589
59016. Check for integer overflow when computing lookbehind lengths. Fixes
591Clusterfuzz issue 15636.
592
59317. Implemented non-atomic positive lookaround assertions.
594
59518. If a lookbehind contained a lookahead that contained another lookbehind
596within it, the nested lookbehind was not correctly processed. For example, if
597/(?<=(?=(?<=a)))b/ was matched to "ab" it gave no match instead of matching
598"b".
599
60019. Implemented pcre2_get_match_data_size().
601
60220. Two alterations to partial matching:
603
604 (a) The definition of a partial match is slightly changed: if a pattern
605 contains any lookbehinds, an empty partial match may be given, because this
606 is another situation where adding characters to the current subject can
607 lead to a full match. Example: /c*+(?<=[bc])/ with subject "ab".
608
609 (b) Similarly, if a pattern could match an empty string, an empty partial
610 match may be given. Example: /(?![ab]).*/ with subject "ab". This case
611 applies only to PCRE2_PARTIAL_HARD.
612
613 (c) An empty string partial hard match can be returned for \z and \Z as it
614 is documented that they shouldn't match.
615
61621. A branch that started with (*ACCEPT) was not being recognized as one that
617could match an empty string.
618
61922. Corrected pcre2_set_character_tables() tables data type: was const unsigned
620char * instead of const uint8_t *, as generated by pcre2_maketables().
621
62223. Upgraded to Unicode 12.1.0.
623
62424. Add -jitfast command line option to pcre2test (to make all the jit options
625available directly).
626
62725. Make pcre2test -C show if libreadline or libedit is supported.
628
62926. If the length of one branch of a group exceeded 65535 (the maximum value
630that is remembered as a minimum length), the whole group's length was
631incorrectly recorded as 65535, leading to incorrect "no match" when start-up
632optimizations were in force.
633
63427. The "rightmost consulted character" value was not always correct; in
635particular, if a pattern ended with a negative lookahead, characters that were
636inspected in that lookahead were not included.
637
63828. Add the pcre2_maketables_free() function.
639
64029. The start-up optimization that looks for a unique initial matching
641code unit in the interpretive engines uses memchr() in 8-bit mode. When the
642search is caseless, it was doing so inefficiently, which ended up slowing down
643the match drastically when the subject was very long. The revised code (a)
644remembers if one case is not found, so it never repeats the search for that
645case after a bumpalong and (b) when one case has been found, it searches only
646up to that position for an earlier occurrence of the other case. This fix
647applies to both interpretive pcre2_match() and to pcre2_dfa_match().
648
64930. While scanning to find the minimum length of a group, if any branch has
650minimum length zero, there is no need to scan any subsequent branches (a small
651compile-time performance improvement).
652
65331. Installed a .gitignore file on a user's suggestion. When using the svn
654repository with git (through git svn) this helps keep it tidy.
655
65632. Add underflow check in JIT which may occur when the value of subject
657string pointer is close to 0.
658
65933. Arrange for classes such as [Aa] which contain just the two cases of the
660same character, to be treated as a single caseless character. This causes the
661first and required code unit optimizations to kick in where relevant.
662
66334. Improve the bitmap of starting bytes for positive classes that include wide
664characters, but no property types, in UTF-8 mode. Previously, on encountering
665such a class, the bits for all bytes greater than \xc4 were set, thus
666specifying any character with codepoint >= 0x100. Now the only bits that are
667set are for the relevant bytes that start the wide characters. This can give a
668noticeable performance improvement.
669
67035. If the bitmap of starting code units contains only 1 or 2 bits, replace it
671with a single starting code unit (1 bit) or a caseless single starting code
672unit if the two relevant characters are case-partners. This is particularly
673relevant to the 8-bit library, though it applies to all. It can give a
674performance boost for patterns such as [Ww]ord and (word|WORD). However, this
675optimization doesn't happen if there is a "required" code unit of the same
676value (because the search for a "required" code unit starts at the match start
677for non-unique first code unit patterns, but after a unique first code unit,
678and patterns such as a*a need the former action).
679
68036. Small patch to pcre2posix.c to set the erroroffset field to -1 immediately
681after a successful compile, instead of at the start of matching to avoid a
682sanitizer complaint (regexec is supposed to be thread safe).
683
68437. Add NEON vectorization to JIT to speed up matching of first character and
685pairs of characters on ARM64 CPUs.
686
68738. If a non-ASCII character was the first in a starting assertion in a
688caseless match, the "first code unit" optimization did not get the casing
689right, and the assertion failed to match a character in the other case if it
690did not start with the same code unit.
691
69239. Fixed the incorrect computation of jump sizes on x86 CPUs in JIT. A masking
693operation was incorrectly removed in r1136. Reported by Ralf Junker.
694
695
696Version 10.33 16-April-2019
697---------------------------
698
6991. Added "allvector" to pcre2test to make it easy to check the part of the
700ovector that shouldn't be changed, in particular after substitute and failed or
701partial matches.
702
7032. Fix subject buffer overread in JIT when UTF is disabled and \X or \R has
704a greater than 1 fixed quantifier. This issue was found by Yunho Kim.
705
7063. Added support for callouts from pcre2_substitute(). After 10.33-RC1, but
707prior to release, fixed a bug that caused a crash if pcre2_substitute() was
708called with a NULL match context.
709
7104. The POSIX functions are now all called pcre2_regcomp() etc., with wrapper
711functions that use the standard POSIX names. However, in pcre2posix.h the POSIX
712names are defined as macros. This should help avoid linking with the wrong
713library in some environments while still exporting the POSIX names for
714pre-existing programs that use them. (The Debian alternative names are also
715defined as macros, but not documented.)
716
7175. Fix an xclass matching issue in JIT.
718
7196. Implement PCRE2_EXTRA_ESCAPED_CR_IS_LF (see Bugzilla 2315).
720
7217. Implement the Perl 5.28 experimental alphabetic names for atomic groups and
722lookaround assertions, for example, (*pla:...) and (*atomic:...). These are
723characterized by a lower case letter following (* and to simplify coding for
724this, the character tables created by pcre2_maketables() were updated to add a
725new "is lower case letter" bit. At the same time, the now unused "is
726hexadecimal digit" bit was removed. The default tables in
727src/pcre2_chartables.c.dist are updated.
728
7298. Implement the new Perl "script run" features (*script_run:...) and
730(*atomic_script_run:...) aka (*sr:...) and (*asr:...).
731
7329. Fixed two typos in change 22 for 10.21, which added special handling for
733ranges such as a-z in EBCDIC environments. The original code probably never
734worked, though there were no bug reports.
735
73610. Implement PCRE2_COPY_MATCHED_SUBJECT for pcre2_match() (including JIT via
737pcre2_match()) and pcre2_dfa_match(), but *not* the pcre2_jit_match() fast
738path. Also, when a match fails, set the subject field in the match data to NULL
739for tidiness - none of the substring extractors should reference this after
740match failure.
741
74211. If a pattern started with a subroutine call that had a quantifier with a
743minimum of zero, an incorrect "match must start with this character" could be
744recorded. Example: /(?&xxx)*ABC(?<xxx>XYZ)/ would (incorrectly) expect 'A' to
745be the first character of a match.
746
74712. The heap limit checking code in pcre2_dfa_match() could suffer from
748overflow if the heap limit was set very large. This could cause incorrect "heap
749limit exceeded" errors.
750
75113. Add "kibibytes" to the heap limit output from pcre2test -C to make the
752units clear.
753
75414. Add a call to pcre2_jit_free_unused_memory() in pcre2grep, for tidiness.
755
75615. Updated the VMS-specific code in pcre2test on the advice of a VMS user.
757
75816. Removed the unnecessary inclusion of stdint.h (or inttypes.h) from
759pcre2_internal.h as it is now included by pcre2.h. Also, change 17 for 10.32
760below was unnecessarily complicated, as inttypes.h is a Standard C header,
761which is defined to be a superset of stdint.h. Instead of conditionally
762including stdint.h or inttypes.h, pcre2.h now unconditionally includes
763inttypes.h. This supports environments that do not have stdint.h but do have
764inttypes.h, which are known to exist. A note in the autotools documentation
765says (November 2018) that there are none known that are the other way round.
766
76717. Added --disable-percent-zt to "configure" (and equivalent to CMake) to
768forcibly disable the use of %zu and %td in formatting strings because there is
769at least one version of VMS that claims to be C99 but does not support these
770modifiers.
771
77218. Added --disable-pcre2grep-callout-fork, which restricts the callout support
773in pcre2grep to the inbuilt echo facility. This may be useful in environments
774that do not support fork().
775
77619. Fix two instances of <= 0 being applied to unsigned integers (the VMS
777compiler complains).
778
77920. Added "fork" support for VMS to pcre2grep, for running an external program
780via a string callout.
781
78221. Improve MAP_JIT flag usage on MacOS. Patch by Rich Siegel.
783
78422. If a pattern started with (*MARK), (*COMMIT), (*PRUNE), (*SKIP), or (*THEN)
785followed by ^ it was not recognized as anchored.
786
78723. The RunGrepTest script used to cut out the test of NUL characters for
788Solaris and MacOS as printf and sed can't handle them. It seems that the *BSD
789systems can't either. I've inverted the test so that only those OS that are
790known to work (currently only Linux) try to run this test.
791
79224. Some tests in RunGrepTest appended to testtrygrep from two different file
793descriptors instead of redirecting stderr to stdout. This worked on Linux, but
794it was reported not to on other systems, causing the tests to fail.
795
79625. In the RunTest script, make the test for stack setting use the same value
797for the stack as it needs for -bigstack.
798
79926. Insert a cast in pcre2_dfa_match.c to suppress a compiler warning.
800
80126. With PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL set, escape sequences such as \s
802which are valid in character classes, but not as the end of ranges, were being
803treated as literals. An example is [_-\s] (but not [\s-_] because that gave an
804error at the *start* of a range). Now an "invalid range" error is given
805independently of PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL.
806
80727. Related to 26 above, PCRE2_BAD_ESCAPE_IS_LITERAL was affecting known escape
808sequences such as \eX when they appeared invalidly in a character class. Now
809the option applies only to unrecognized or malformed escape sequences.
810
81128. Fix word boundary in JIT compiler. Patch by Mike Munday.
812
81329. The pcre2_dfa_match() function was incorrectly handling conditional version
814tests such as (?(VERSION>=0)...) when the version test was true. Incorrect
815processing or a crash could result.
816
81730. When PCRE2_UTF is set, allow non-ASCII letters and decimal digits in group
818names, as Perl does. There was a small bug in this new code, found by
819ClusterFuzz 12950, fixed before release.
820
82131. Implemented PCRE2_EXTRA_ALT_BSUX to support ECMAScript 6's \u{hhh}
822construct.
823
82432. Compile \p{Any} to be the same as . in DOTALL mode, so that it benefits
825from auto-anchoring if \p{Any}* starts a pattern.
826
82733. Compile invalid UTF check in JIT test when only pcre32 is enabled.
828
82934. For some time now, CMake has been warning about the setting of policy
830CMP0026 to "OLD" in CmakeLists.txt, and hinting that the feature might be
831removed in a future version. A request for CMake expertise on the list produced
832no result, so I have now hacked CMakeLists.txt along the lines of some changes
833I found on the Internet. The new code no longer needs the policy setting, and
834it appears to work fine on Linux.
835
83635. Setting --enable-jit=auto for an out-of-tree build failed because the
837source directory wasn't in the search path for AC_TRY_COMPILE always. Patch
838from Ross Burton.
839
84036. Disable SSE2 JIT optimizations in x86 CPUs when SSE2 is not available.
841Patch by Guillem Jover.
842
84337. Changed expressions such as 1<<10 to 1u<<10 in many places because compiler
844warnings were reported.
845
84638. Using the clang compiler with sanitizing options causes runtime complaints
847about truncation for statments such as x = ~x when x is an 8-bit value; it
848seems to compute ~x as a 32-bit value. Changing such statements to x = 255 ^ x
849gets rid of the warnings. There were also two missing casts in pcre2test.
850
851
852Version 10.32 10-September-2018
853-------------------------------
854
8551. When matching using the the REG_STARTEND feature of the POSIX API with a
856non-zero starting offset, unset capturing groups with lower numbers than a
857group that did capture something were not being correctly returned as "unset"
858(that is, with offset values of -1).
859
8602. When matching using the POSIX API, pcre2test used to omit listing unset
861groups altogether. Now it shows those that come before any actual captures as
862"<unset>", as happens for non-POSIX matching.
863
8643. Running "pcre2test -C" always stated "\R matches CR, LF, or CRLF only",
865whatever the build configuration was. It now correctly says "\R matches all
866Unicode newlines" in the default case when --enable-bsr-anycrlf has not been
867specified. Similarly, running "pcre2test -C bsr" never produced the result
868ANY.
869
8704. Matching the pattern /(*UTF)\C[^\v]+\x80/ against an 8-bit string containing
871multi-code-unit characters caused bad behaviour and possibly a crash. This
872issue was fixed for other kinds of repeat in release 10.20 by change 19, but
873repeating character classes were overlooked.
874
8755. pcre2grep now supports the inclusion of binary zeros in patterns that are
876read from files via the -f option.
877
8786. A small fix to pcre2grep to avoid compiler warnings for -Wformat-overflow=2.
879
8807. Added --enable-jit=auto support to configure.ac.
881
8828. Added some dummy variables to the heapframe structure in 16-bit and 32-bit
883modes for the benefit of m68k, where pointers can be 16-bit aligned. The
884dummies force 32-bit alignment and this ensures that the structure is a
885multiple of PCRE2_SIZE, a requirement that is tested at compile time. In other
886architectures, alignment requirements take care of this automatically.
887
8889. When returning an error from pcre2_pattern_convert(), ensure the error
889offset is set zero for early errors.
890
89110. A number of patches for Windows support from Daniel Richard G:
892
893 (a) List of error numbers in Runtest.bat corrected (it was not the same as in
894 Runtest).
895
896 (b) pcre2grep snprintf() workaround as used elsewhere in the tree.
897
898 (c) Support for non-C99 snprintf() that returns -1 in the overflow case.
899
90011. Minor tidy of pcre2_dfa_match() code.
901
90212. Refactored pcre2_dfa_match() so that the internal recursive calls no longer
903use the stack for local workspace and local ovectors. Instead, an initial block
904of stack is reserved, but if this is insufficient, heap memory is used. The
905heap limit parameter now applies to pcre2_dfa_match().
906
90713. If a "find limits" test of DFA matching in pcre2test resulted in too many
908matches for the ovector, no matches were displayed.
909
91014. Removed an occurrence of ctrl/Z from test 6 because Windows treats it as
911EOF. The test looks to have come from a fuzzer.
912
91315. If PCRE2 was built with a default match limit a lot greater than the
914default default of 10 000 000, some JIT tests of the match limit no longer
915failed. All such tests now set 10 000 000 as the upper limit.
916
91716. Another Windows related patch for pcregrep to ensure that WIN32 is
918undefined under Cygwin.
919
92017. Test for the presence of stdint.h and inttypes.h in configure and CMake and
921include whichever exists (stdint preferred) instead of unconditionally
922including stdint. This makes life easier for old and non-standard systems.
923
92418. Further changes to improve portability, especially to old and or non-
925standard systems:
926
927 (a) Put all printf arguments in RunGrepTest into single, not double, quotes,
928 and use \0 not \x00 for binary zero.
929
930 (b) Avoid the use of C++ (i.e. BCPL) // comments.
931
932 (c) Parameterize the use of %zu in pcre2test to make it like %td. For both of
933 these now, if using MSVC or a standard C before C99, %lu is used with a
934 cast if necessary.
935
93619. Applied a contributed patch to CMakeLists.txt to increase the stack size
937when linking pcre2test with MSVC. This gets rid of a stack overflow error in
938the standard set of tests.
939
94020. Output a warning in pcre2test when ignoring the "altglobal" modifier when
941it is given with the "replace" modifier.
942
94321. In both pcre2test and pcre2_substitute(), with global matching, a pattern
944that matched an empty string, but never at the starting match offset, was not
945handled in a Perl-compatible way. The pattern /(<?=\G.)/ is an example of such
946a pattern. Because \G is in a lookbehind assertion, there has to be a
947"bumpalong" before there can be a match. The automatic "advance by one
948character after an empty string match" rule is therefore inappropriate. A more
949complicated algorithm has now been implemented.
950
95122. When checking to see if a lookbehind is of fixed length, lookaheads were
952correctly ignored, but qualifiers on lookaheads were not being ignored, leading
953to an incorrect "lookbehind assertion is not fixed length" error.
954
95523. The VERSION condition test was reading fractional PCRE2 version numbers
956such as the 04 in 10.04 incorrectly and hence giving wrong results.
957
95824. Updated to Unicode version 11.0.0. As well as the usual addition of new
959scripts and characters, this involved re-jigging the grapheme break property
960algorithm because Unicode has changed the way emojis are handled.
961
96225. Fixed an obscure bug that struck when there were two atomic groups not
963separated by something with a backtracking point. There could be an incorrect
964backtrack into the first of the atomic groups. A complicated example is
965/(?>a(*:1))(?>b)(*SKIP:1)x|.*/ matched against "abc", where the *SKIP
966shouldn't find a MARK (because is in an atomic group), but it did.
967
96826. Upgraded the perltest.sh script: (1) #pattern lines can now be used to set
969a list of modifiers for all subsequent patterns - only those that the script
970recognizes are meaningful; (2) #subject lines can be used to set or unset a
971default "mark" modifier; (3) Unsupported #command lines give a warning when
972they are ignored; (4) Mark data is output only if the "mark" modifier is
973present.
974
97527. (*ACCEPT:ARG), (*FAIL:ARG), and (*COMMIT:ARG) are now supported.
976
97728. A (*MARK) name was not being passed back for positive assertions that were
978terminated by (*ACCEPT).
979
98029. Add support for \N{U+dddd}, but only in Unicode mode.
981
98230. Add support for (?^) for unsetting all imnsx options.
983
98431. The PCRE2_EXTENDED (/x) option only ever discarded space characters whose
985code point was less than 256 and that were recognized by the lookup table
986generated by pcre2_maketables(), which uses isspace() to identify white space.
987Now, when Unicode support is compiled, PCRE2_EXTENDED also discards U+0085,
988U+200E, U+200F, U+2028, and U+2029, which are additional characters defined by
989Unicode as "Pattern White Space". This makes PCRE2 compatible with Perl.
990
99132. In certain circumstances, option settings within patterns were not being
992correctly processed. For example, the pattern /((?i)A)(?m)B/ incorrectly
993matched "ab". (The (?m) setting lost the fact that (?i) should be reset at the
994end of its group during the parse process, but without another setting such as
995(?m) the compile phase got it right.) This bug was introduced by the
996refactoring in release 10.23.
997
99833. PCRE2 uses bcopy() if available when memmove() is not, and it used just to
999define memmove() as function call to bcopy(). This hasn't been tested for a
1000long time because in pcre2test the result of memmove() was being used, whereas
1001bcopy() doesn't return a result. This feature is now refactored always to call
1002an emulation function when there is no memmove(). The emulation makes use of
1003bcopy() when available.
1004
100534. When serializing a pattern, set the memctl, executable_jit, and tables
1006fields (that is, all the fields that contain pointers) to zeros so that the
1007result of serializing is always the same. These fields are re-set when the
1008pattern is deserialized.
1009
101035. In a pattern such as /[^\x{100}-\x{ffff}]*[\x80-\xff]/ which has a repeated
1011negative class with no characters less than 0x100 followed by a positive class
1012with only characters less than 0x100, the first class was incorrectly being
1013auto-possessified, causing incorrect match failures.
1014
101536. Removed the character type bit ctype_meta, which dates from PCRE1 and is
1016not used in PCRE2.
1017
101837. Tidied up unnecessarily complicated macros used in the escapes table.
1019
102038. Since 10.21, the new testoutput8-16-4 file has accidentally been omitted
1021from distribution tarballs, owing to a typo in Makefile.am which had
1022testoutput8-16-3 twice. Now fixed.
1023
102439. If the only branch in a conditional subpattern was anchored, the whole
1025subpattern was treated as anchored, when it should not have been, since the
1026assumed empty second branch cannot be anchored. Demonstrated by test patterns
1027such as /(?(1)^())b/ or /(?(?=^))b/.
1028
102940. A repeated conditional subpattern that could match an empty string was
1030always assumed to be unanchored. Now it it checked just like any other
1031repeated conditional subpattern, and can be found to be anchored if the minimum
1032quantifier is one or more. I can't see much use for a repeated anchored
1033pattern, but the behaviour is now consistent.
1034
103541. Minor addition to pcre2_jit_compile.c to avoid static analyzer complaint
1036(for an event that could never occur but you had to have external information
1037to know that).
1038
103942. If before the first match in a file that was being searched by pcre2grep
1040there was a line that was sufficiently long to cause the input buffer to be
1041expanded, the variable holding the location of the end of the previous match
1042was being adjusted incorrectly, and could cause an overflow warning from a code
1043sanitizer. However, as the value is used only to print pending "after" lines
1044when the next match is reached (and there are no such lines in this case) this
1045bug could do no damage.
1046
1047
1048Version 10.31 12-February-2018
1049------------------------------
1050
10511. Fix typo (missing ]) in VMS code in pcre2test.c.
1052
10532. Replace the replicated code for matching extended Unicode grapheme sequences
1054(which got a lot more complicated by change 10.30/49) by a single subroutine
1055that is called by both pcre2_match() and pcre2_dfa_match().
1056
10573. Add idempotent guard to pcre2_internal.h.
1058
10594. Add new pcre2_config() options: PCRE2_CONFIG_NEVER_BACKSLASH_C and
1060PCRE2_CONFIG_COMPILED_WIDTHS.
1061
10625. Cut out \C tests in the JIT regression tests when NEVER_BACKSLASH_C is
1063defined (e.g. by --enable-never-backslash-C).
1064
10656. Defined public names for all the pcre2_compile() error numbers, and used
1066the public names in pcre2_convert.c.
1067
10687. Fixed a small memory leak in pcre2test (convert contexts).
1069
10708. Added two casts to compile.c and one to match.c to avoid compiler warnings.
1071
10729. Added code to pcre2grep when compiled under VMS to set the symbol
1073PCRE2GREP_RC to the exit status, because VMS does not distinguish between
1074exit(0) and exit(1).
1075
107610. Added the -LM (list modifiers) option to pcre2test. Also made -C complain
1077about a bad option only if the following argument item does not start with a
1078hyphen.
1079
108011. pcre2grep was truncating components of file names to 128 characters when
1081processing files with the -r option, and also (some very odd code) truncating
1082path names to 512 characters. There is now a check on the absolute length of
1083full path file names, which may be up to 2047 characters long.
1084
108512. When an assertion contained (*ACCEPT) it caused all open capturing groups
1086to be closed (as for a non-assertion ACCEPT), which was wrong and could lead to
1087misbehaviour for subsequent references to groups that started outside the
1088assertion. ACCEPT in an assertion now closes only those groups that were
1089started within that assertion. Fixes oss-fuzz issues 3852 and 3891.
1090
109113. Multiline matching in pcre2grep was misbehaving if the pattern matched
1092within a line, and then matched again at the end of the line and over into
1093subsequent lines. Behaviour was different with and without colouring, and
1094sometimes context lines were incorrectly printed and/or line endings were lost.
1095All these issues should now be fixed.
1096
109714. If --line-buffered was specified for pcre2grep when input was from a
1098compressed file (.gz or .bz2) a segfault occurred. (Line buffering should be
1099ignored for compressed files.)
1100
110115. Although pcre2_jit_match checks whether the pattern is compiled
1102in a given mode, it was also expected that at least one mode is available.
1103This is fixed and pcre2_jit_match returns with PCRE2_ERROR_JIT_BADOPTION
1104when the pattern is not optimized by JIT at all.
1105
110616. The line number and related variables such as match counts in pcre2grep
1107were all int variables, causing overflow when files with more than 2147483647
1108lines were processed (assuming 32-bit ints). They have all been changed to
1109unsigned long ints.
1110
111117. If a backreference with a minimum repeat count of zero was first in a
1112pattern, apart from assertions, an incorrect first matching character could be
1113recorded. For example, for the pattern /(?=(a))\1?b/, "b" was incorrectly set
1114as the first character of a match.
1115
111618. Characters in a leading positive assertion are considered for recording a
1117first character of a match when the rest of the pattern does not provide one.
1118However, a character in a non-assertive group within a leading assertion such
1119as in the pattern /(?=(a))\1?b/ caused this process to fail. This was an
1120infelicity rather than an outright bug, because it did not affect the result of
1121a match, just its speed. (In fact, in this case, the starting 'a' was
1122subsequently picked up in the study.)
1123
112419. A minor tidy in pcre2_match(): making all PCRE2_ERROR_ returns use "return"
1125instead of "RRETURN" saves unwinding the backtracks in these cases (only one
1126didn't).
1127
112820. Allocate a single callout block on the stack at the start of pcre2_match()
1129and set its never-changing fields once only. Do the same for pcre2_dfa_match().
1130
113121. Save the extra compile options (set in the compile context) with the
1132compiled pattern (they were not previously saved), add PCRE2_INFO_EXTRAOPTIONS
1133to retrieve them, and update pcre2test to show them.
1134
113522. Added PCRE2_CALLOUT_STARTMATCH and PCRE2_CALLOUT_BACKTRACK bits to a new
1136field callout_flags in callout blocks. The bits are set by pcre2_match(), but
1137not by JIT or pcre2_dfa_match(). Their settings are shown in pcre2test callouts
1138if the callout_extra subject modifier is set. These bits are provided to help
1139with tracking how a backtracking match is proceeding.
1140
114123. Updated the pcre2demo.c demonstration program, which was missing the extra
1142code for -g that handles the case when \K in an assertion causes the match to
1143end at the original start point. Also arranged for it to detect when \K causes
1144the end of a match to be before its start.
1145
114624. Similar to 23 above, strange things (including loops) could happen in
1147pcre2grep when \K was used in an assertion when --colour was used or in
1148multiline mode. The "end at original start point" bug is fixed, and if the end
1149point is found to be before the start point, they are swapped.
1150
115125. When PCRE2_FIRSTLINE without PCRE2_NO_START_OPTIMIZE was used in non-JIT
1152matching (both pcre2_match() and pcre2_dfa_match()) and the matched string
1153started with the first code unit of a newline sequence, matching failed because
1154it was not tried at the newline.
1155
115626. Code for giving up a non-partial match after failing to find a starting
1157code unit anywhere in the subject was missing when searching for one of a
1158number of code units (the bitmap case) in both pcre2_match() and
1159pcre2_dfa_match(). This was a missing optimization rather than a bug.
1160
116127. Tidied up the ACROSSCHAR macro to be like FORWARDCHAR and BACKCHAR, using a
1162pointer argument rather than a code unit value. This should not have affected
1163the generated code.
1164
116528. The JIT compiler has been updated.
1166
116729. Avoid pointer overflow for unset captures in pcre2_substring_list_get().
1168This could not actually cause a crash because it was always used in a memcpy()
1169call with zero length.
1170
117130. Some internal structures have a variable-length ovector[] as their last
1172element. Their actual memory is obtained dynamically, giving an ovector of
1173appropriate length. However, they are defined in the structure as
1174ovector[NUMBER], where NUMBER is large so that array bound checkers don't
1175grumble. The value of NUMBER was 10000, but a fuzzer exceeded 5000 capturing
1176groups, making the ovector larger than this. The number has been increased to
1177131072, which allows for the maximum number of captures (65535) plus the
1178overall match. This fixes oss-fuzz issue 5415.
1179
118031. Auto-possessification at the end of a capturing group was dependent on what
1181follows the group (e.g. /(a+)b/ would auto-possessify the a+) but this caused
1182incorrect behaviour when the group was called recursively from elsewhere in the
1183pattern where something different might follow. This bug is an unforseen
1184consequence of change #1 for 10.30 - the implementation of backtracking into
1185recursions. Iterators at the ends of capturing groups are no longer considered
1186for auto-possessification if the pattern contains any recursions. Fixes
1187Bugzilla #2232.
1188
1189
1190Version 10.30 14-August-2017
1191----------------------------
1192
11931. The main interpreter, pcre2_match(), has been refactored into a new version
1194that does not use recursive function calls (and therefore the stack) for
1195remembering backtracking positions. This makes --disable-stack-for-recursion a
1196NOOP. The new implementation allows backtracking into recursive group calls in
1197patterns, making it more compatible with Perl, and also fixes some other
1198hard-to-do issues such as #1887 in Bugzilla. The code is also cleaner because
1199the old code had a number of fudges to try to reduce stack usage. It seems to
1200run no slower than the old code.
1201
1202A number of bugs in the refactored code were subsequently fixed during testing
1203before release, but after the code was made available in the repository. These
1204bugs were never in fully released code, but are noted here for the record.
1205
1206 (a) If a pattern had fewer capturing parentheses than the ovector supplied in
1207 the match data block, a memory error (detectable by ASAN) occurred after
1208 a match, because the external block was being set from non-existent
1209 internal ovector fields. Fixes oss-fuzz issue 781.
1210
1211 (b) A pattern with very many capturing parentheses (when the internal frame
1212 size was greater than the initial frame vector on the stack) caused a
1213 crash. A vector on the heap is now set up at the start of matching if the
1214 vector on the stack is not big enough to handle at least 10 frames.
1215 Fixes oss-fuzz issue 783.
1216
1217 (c) Handling of (*VERB)s in recursions was wrong in some cases.
1218
1219 (d) Captures in negative assertions that were used as conditions were not
1220 happening if the assertion matched via (*ACCEPT).
1221
1222 (e) Mark values were not being passed out of recursions.
1223
1224 (f) Refactor some code in do_callout() to avoid picky compiler warnings about
1225 negative indices. Fixes oss-fuzz issue 1454.
1226
1227 (g) Similarly refactor the way the variable length ovector is addressed for
1228 similar reasons. Fixes oss-fuzz issue 1465.
1229
12302. Now that pcre2_match() no longer uses recursive function calls (see above),
1231the "match limit recursion" value seems misnamed. It still exists, and limits
1232the depth of tree that is searched. To avoid future confusion, it has been
1233renamed as "depth limit" in all relevant places (--with-depth-limit,
1234(*LIMIT_DEPTH), pcre2_set_depth_limit(), etc) but the old names are still
1235available for backwards compatibility.
1236
12373. Hardened pcre2test so as to reduce the number of bugs reported by fuzzers:
1238
1239 (a) Check for malloc failures when getting memory for the ovector (POSIX) or
1240 the match data block (non-POSIX).
1241
12424. In the 32-bit library in non-UTF mode, an attempt to find a Unicode property
1243for a character with a code point greater than 0x10ffff (the Unicode maximum)
1244caused a crash.
1245
12465. If a lookbehind assertion that contained a back reference to a group
1247appearing later in the pattern was compiled with the PCRE2_ANCHORED option,
1248undefined actions (often a segmentation fault) could occur, depending on what
1249other options were set. An example assertion is (?<!\1(abc)) where the
1250reference \1 precedes the group (abc). This fixes oss-fuzz issue 865.
1251
12526. Added the PCRE2_INFO_FRAMESIZE item to pcre2_pattern_info() and arranged for
1253pcre2test to use it to output the frame size when the "framesize" modifier is
1254given.
1255
12567. Reworked the recursive pattern matching in the JIT compiler to follow the
1257interpreter changes.
1258
12598. When the zero_terminate modifier was specified on a pcre2test subject line
1260for global matching, unpredictable things could happen. For example, in UTF-8
1261mode, the pattern //g,zero_terminate read random memory when matched against an
1262empty string with zero_terminate. This was a bug in pcre2test, not the library.
1263
12649. Moved some Windows-specific code in pcre2grep (introduced in 10.23/13) out
1265of the section that is compiled when Unix-style directory scanning is
1266available, and into a new section that is always compiled for Windows.
1267
126810. In pcre2test, explicitly close the file after an error during serialization
1269or deserialization (the "load" or "save" commands).
1270
127111. Fix memory leak in pcre2_serialize_decode() when the input is invalid.
1272
127312. Fix potential NULL dereference in pcre2_callout_enumerate() if called with
1274a NULL pattern pointer when Unicode support is available.
1275
127613. When the 32-bit library was being tested by pcre2test, error messages that
1277were longer than 64 code units could cause a buffer overflow. This was a bug in
1278pcre2test.
1279
128014. The alternative matching function, pcre2_dfa_match() misbehaved if it
1281encountered a character class with a possessive repeat, for example [a-f]{3}+.
1282
128315. The depth (formerly recursion) limit now applies to DFA matching (as
1284of 10.23/36); pcre2test has been upgraded so that \=find_limits works with DFA
1285matching to find the minimum value for this limit.
1286
128716. Since 10.21, if pcre2_match() was called with a null context, default
1288memory allocation functions were used instead of whatever was used when the
1289pattern was compiled.
1290
129117. Changes to the pcre2test "memory" modifier on a subject line. These apply
1292only to pcre2_match():
1293
1294 (a) Warn if null_context is set on both pattern and subject, because the
1295 memory details cannot then be shown.
1296
1297 (b) Remember (up to a certain number of) memory allocations and their
1298 lengths, and list only the lengths, so as to be system-independent.
1299 (In practice, the new interpreter never has more than 2 blocks allocated
1300 simultaneously.)
1301
130218. Make pcre2test detect an error return from pcre2_get_error_message(), give
1303a message, and abandon the run (this would have detected #13 above).
1304
130519. Implemented PCRE2_ENDANCHORED.
1306
130720. Applied Jason Hood's patches (slightly modified) to pcre2grep, to implement
1308the --output=text (-O) option and the inbuilt callout echo.
1309
131021. Extend auto-anchoring etc. to ignore groups with a zero qualifier and
1311single-branch conditions with a false condition (e.g. DEFINE) at the start of a
1312branch. For example, /(?(DEFINE)...)^A/ and /(...){0}^B/ are now flagged as
1313anchored.
1314
131522. Added an explicit limit on the amount of heap used by pcre2_match(), set by
1316pcre2_set_heap_limit() or (*LIMIT_HEAP=xxx). Upgraded pcre2test to show the
1317heap limit along with other pattern information, and to find the minimum when
1318the find_limits modifier is set.
1319
132023. Write to the last 8 bytes of the pcre2_real_code structure when a compiled
1321pattern is set up so as to initialize any padding the compiler might have
1322included. This avoids valgrind warnings when a compiled pattern is copied, in
1323particular when it is serialized.
1324
132524. Remove a redundant line of code left in accidentally a long time ago.
1326
132725. Remove a duplication typo in pcre2_tables.c
1328
132926. Correct an incorrect cast in pcre2_valid_utf.c
1330
133127. Update pcre2test, remove some unused code in pcre2_match(), and upgrade the
1332tests to improve coverage.
1333
133428. Some fixes/tidies as a result of looking at Coverity Scan output:
1335
1336 (a) Typo: ">" should be ">=" in opcode check in pcre2_auto_possess.c.
1337 (b) Added some casts to avoid "suspicious implicit sign extension".
1338 (c) Resource leaks in pcre2test in rare error cases.
1339 (d) Avoid warning for never-use case OP_TABLE_LENGTH which is just a fudge
1340 for checking at compile time that tables are the right size.
1341 (e) Add missing "fall through" comment.
1342
134329. Implemented PCRE2_EXTENDED_MORE and related /xx and (?xx) features.
1344
134530. Implement (?n: for PCRE2_NO_AUTO_CAPTURE, because Perl now has this.
1346
134731. If more than one of "push", "pushcopy", or "pushtablescopy" were set in
1348pcre2test, a crash could occur.
1349
135032. Make -bigstack in RunTest allocate a 64MiB stack (instead of 16MiB) so
1351that all the tests can run with clang's sanitizing options.
1352
135333. Implement extra compile options in the compile context and add the first
1354one: PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES.
1355
135634. Implement newline type PCRE2_NEWLINE_NUL.
1357
135835. A lookbehind assertion that had a zero-length branch caused undefined
1359behaviour when processed by pcre2_dfa_match(). This is oss-fuzz issue 1859.
1360
136136. The match limit value now also applies to pcre2_dfa_match() as there are
1362patterns that can use up a lot of resources without necessarily recursing very
1363deeply. (Compare item 10.23/36.) This should fix oss-fuzz #1761.
1364
136537. Implement PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL.
1366
136738. Fix returned offsets from regexec() when REG_STARTEND is used with a
1368starting offset greater than zero.
1369
137039. Implement REG_PEND (GNU extension) for the POSIX wrapper.
1371
137240. Implement the subject_literal modifier in pcre2test, and allow jitstack on
1373pattern lines.
1374
137541. Implement PCRE2_LITERAL and use it to support REG_NOSPEC.
1376
137742. Implement PCRE2_EXTRA_MATCH_LINE and PCRE2_EXTRA_MATCH_WORD for the benefit
1378of pcre2grep.
1379
138043. Re-implement pcre2grep's -F, -w, and -x options using PCRE2_LITERAL,
1381PCRE2_EXTRA_MATCH_WORD, and PCRE2_EXTRA_MATCH_LINE. This fixes two bugs:
1382
1383 (a) The -F option did not work for fixed strings containing \E.
1384 (b) The -w option did not work for patterns with multiple branches.
1385
138644. Added configuration options for the SELinux compatible execmem allocator in
1387JIT.
1388
138945. Increased the limit for searching for a "must be present" code unit in
1390subjects from 1000 to 2000 for 8-bit searches, since they use memchr() and are
1391much faster.
1392
139346. Arrange for anchored patterns to record and use "first code unit" data,
1394because this can give a fast "no match" without searching for a "required code
1395unit". Previously only non-anchored patterns did this.
1396
139747. Upgraded the Unicode tables from Unicode 8.0.0 to Unicode 10.0.0.
1398
139948. Add the callout_no_where modifier to pcre2test.
1400
140149. Update extended grapheme breaking rules to the latest set that are in
1402Unicode Standard Annex #29.
1403
140450. Added experimental foreign pattern conversion facilities
1405(pcre2_pattern_convert() and friends).
1406
140751. Change the macro FWRITE, used in pcre2grep, to FWRITE_IGNORE because FWRITE
1408is defined in a system header in cygwin. Also modified some of the #ifdefs in
1409pcre2grep related to Windows and Cygwin support.
1410
141152. Change 3(g) for 10.23 was a bit too zealous. If a hyphen that follows a
1412character class is the last character in the class, Perl does not give a
1413warning. PCRE2 now also treats this as a literal.
1414
141553. Related to 52, though PCRE2 was throwing an error for [[:digit:]-X] it was
1416not doing so for [\d-X] (and similar escapes), as is documented.
1417
141854. Fixed a MIPS issue in the JIT compiler reported by Joshua Kinard.
1419
142055. Fixed a "maybe uninitialized" warning for class_uchardata in \p handling in
1421pcre2_compile() which could never actually trigger (code should have been cut
1422out when Unicode support is disabled).
1423
1424
1425Version 10.23 14-February-2017
1426------------------------------
1427
14281. Extended pcre2test with the utf8_input modifier so that it is able to
1429generate all possible 16-bit and 32-bit code unit values in non-UTF modes.
1430
14312. In any wide-character mode (8-bit UTF or any 16-bit or 32-bit mode), without
1432PCRE2_UCP set, a negative character type such as \D in a positive class should
1433cause all characters greater than 255 to match, whatever else is in the class.
1434There was a bug that caused this not to happen if a Unicode property item was
1435added to such a class, for example [\D\P{Nd}] or [\W\pL].
1436
14373. There has been a major re-factoring of the pcre2_compile.c file. Most syntax
1438checking is now done in the pre-pass that identifies capturing groups. This has
1439reduced the amount of duplication and made the code tidier. While doing this,
1440some minor bugs and Perl incompatibilities were fixed, including:
1441
1442 (a) \Q\E in the middle of a quantifier such as A+\Q\E+ is now ignored instead
1443 of giving an invalid quantifier error.
1444
1445 (b) {0} can now be used after a group in a lookbehind assertion; previously
1446 this caused an "assertion is not fixed length" error.
1447
1448 (c) Perl always treats (?(DEFINE) as a "define" group, even if a group with
1449 the name "DEFINE" exists. PCRE2 now does likewise.
1450
1451 (d) A recursion condition test such as (?(R2)...) must now refer to an
1452 existing subpattern.
1453
1454 (e) A conditional recursion test such as (?(R)...) misbehaved if there was a
1455 group whose name began with "R".
1456
1457 (f) When testing zero-terminated patterns under valgrind, the terminating
1458 zero is now marked "no access". This catches bugs that would otherwise
1459 show up only with non-zero-terminated patterns.
1460
1461 (g) A hyphen appearing immediately after a POSIX character class (for example
1462 /[[:ascii:]-z]/) now generates an error. Perl does accept this as a
1463 literal, but gives a warning, so it seems best to fail it in PCRE.
1464
1465 (h) An empty \Q\E sequence may appear after a callout that precedes an
1466 assertion condition (it is, of course, ignored).
1467
1468One effect of the refactoring is that some error numbers and messages have
1469changed, and the pattern offset given for compiling errors is not always the
1470right-most character that has been read. In particular, for a variable-length
1471lookbehind assertion it now points to the start of the assertion. Another
1472change is that when a callout appears before a group, the "length of next
1473pattern item" that is passed now just gives the length of the opening
1474parenthesis item, not the length of the whole group. A length of zero is now
1475given only for a callout at the end of the pattern. Automatic callouts are no
1476longer inserted before and after explicit callouts in the pattern.
1477
1478A number of bugs in the refactored code were subsequently fixed during testing
1479before release, but after the code was made available in the repository. Many
1480of the bugs were discovered by fuzzing testing. Several of them were related to
1481the change from assuming a zero-terminated pattern (which previously had
1482required non-zero terminated strings to be copied). These bugs were never in
1483fully released code, but are noted here for the record.
1484
1485 (a) An overall recursion such as (?0) inside a lookbehind assertion was not
1486 being diagnosed as an error.
1487
1488 (b) In utf mode, the length of a *MARK (or other verb) name was being checked
1489 in characters instead of code units, which could lead to bad code being
1490 compiled, leading to unpredictable behaviour.
1491
1492 (c) In extended /x mode, characters whose code was greater than 255 caused
1493 a lookup outside one of the global tables. A similar bug existed for wide
1494 characters in *VERB names.
1495
1496 (d) The amount of memory needed for a compiled pattern was miscalculated if a
1497 lookbehind contained more than one toplevel branch and the first branch
1498 was of length zero.
1499
1500 (e) In UTF-8 or UTF-16 modes with PCRE2_EXTENDED (/x) set and a non-zero-
1501 terminated pattern, if a # comment ran on to the end of the pattern, one
1502 or more code units past the end were being read.
1503
1504 (f) An unterminated repeat at the end of a non-zero-terminated pattern (e.g.
1505 "{2,2") could cause reading beyond the pattern.
1506
1507 (g) When reading a callout string, if the end delimiter was at the end of the
1508 pattern one further code unit was read.
1509
1510 (h) An unterminated number after \g' could cause reading beyond the pattern.
1511
1512 (i) An insufficient memory size was being computed for compiling with
1513 PCRE2_AUTO_CALLOUT.
1514
1515 (j) A conditional group with an assertion condition used more memory than was
1516 allowed for it during parsing, so too many of them could therefore
1517 overrun a buffer.
1518
1519 (k) If parsing a pattern exactly filled the buffer, the internal test for
1520 overrun did not check when the final META_END item was added.
1521
1522 (l) If a lookbehind contained a subroutine call, and the called group
1523 contained an option setting such as (?s), and the PCRE2_ANCHORED option
1524 was set, unpredictable behaviour could occur. The underlying bug was
1525 incorrect code and insufficient checking while searching for the end of
1526 the called subroutine in the parsed pattern.
1527
1528 (m) Quantifiers following (*VERB)s were not being diagnosed as errors.
1529
1530 (n) The use of \Q...\E in a (*VERB) name when PCRE2_ALT_VERBNAMES and
1531 PCRE2_AUTO_CALLOUT were both specified caused undetermined behaviour.
1532
1533 (o) If \Q was preceded by a quantified item, and the following \E was
1534 followed by '?' or '+', and there was at least one literal character
1535 between them, an internal error "unexpected repeat" occurred (example:
1536 /.+\QX\E+/).
1537
1538 (p) A buffer overflow could occur while sorting the names in the group name
1539 list (depending on the order in which the names were seen).
1540
1541 (q) A conditional group that started with a callout was not doing the right
1542 check for a following assertion, leading to compiling bad code. Example:
1543 /(?(C'XX))?!XX/
1544
1545 (r) If a character whose code point was greater than 0xffff appeared within
1546 a lookbehind that was within another lookbehind, the calculation of the
1547 lookbehind length went wrong and could provoke an internal error.
1548
1549 (t) The sequence \E- or \Q\E- after a POSIX class in a character class caused
1550 an internal error. Now the hyphen is treated as a literal.
1551
15524. Back references are now permitted in lookbehind assertions when there are
1553no duplicated group numbers (that is, (?| has not been used), and, if the
1554reference is by name, there is only one group of that name. The referenced
1555group must, of course be of fixed length.
1556
15575. pcre2test has been upgraded so that, when run under valgrind with valgrind
1558support enabled, reading past the end of the pattern is detected, both when
1559compiling and during callout processing.
1560
15616. \g{+<number>} (e.g. \g{+2} ) is now supported. It is a "forward back
1562reference" and can be useful in repetitions (compare \g{-<number>} ). Perl does
1563not recognize this syntax.
1564
15657. Automatic callouts are no longer generated before and after callouts in the
1566pattern.
1567
15688. When pcre2test was outputing information from a callout, the caret indicator
1569for the current position in the subject line was incorrect if it was after an
1570escape sequence for a character whose code point was greater than \x{ff}.
1571
15729. Change 19 for 10.22 had a typo (PCRE_STATIC_RUNTIME should be
1573PCRE2_STATIC_RUNTIME). Fix from David Gaussmann.
1574
157510. Added --max-buffer-size to pcre2grep, to allow for automatic buffer
1576expansion when long lines are encountered. Original patch by Dmitry
1577Cherniachenko.
1578
157911. If pcre2grep was compiled with JIT support, but the library was compiled
1580without it (something that neither ./configure nor CMake allow, but it can be
1581done by editing config.h), pcre2grep was giving a JIT error. Now it detects
1582this situation and does not try to use JIT.
1583
158412. Added some "const" qualifiers to variables in pcre2grep.
1585
158613. Added Dmitry Cherniachenko's patch for colouring output in Windows
1587(untested by me). Also, look for GREP_COLOUR or GREP_COLOR if the environment
1588variables PCRE2GREP_COLOUR and PCRE2GREP_COLOR are not found.
1589
159014. Add the -t (grand total) option to pcre2grep.
1591
159215. A number of bugs have been mended relating to match start-up optimizations
1593when the first thing in a pattern is a positive lookahead. These all applied
1594only when PCRE2_NO_START_OPTIMIZE was *not* set:
1595
1596 (a) A pattern such as (?=.*X)X$ was incorrectly optimized as if it needed
1597 both an initial 'X' and a following 'X'.
1598 (b) Some patterns starting with an assertion that started with .* were
1599 incorrectly optimized as having to match at the start of the subject or
1600 after a newline. There are cases where this is not true, for example,
1601 (?=.*[A-Z])(?=.{8,16})(?!.*[\s]) matches after the start in lines that
1602 start with spaces. Starting .* in an assertion is no longer taken as an
1603 indication of matching at the start (or after a newline).
1604
160516. The "offset" modifier in pcre2test was not being ignored (as documented)
1606when the POSIX API was in use.
1607
160817. Added --enable-fuzz-support to "configure", causing an non-installed
1609library containing a test function that can be called by fuzzers to be
1610compiled. A non-installed binary to run the test function locally, called
1611pcre2fuzzcheck is also compiled.
1612
161318. A pattern with PCRE2_DOTALL (/s) set but not PCRE2_NO_DOTSTAR_ANCHOR, and
1614which started with .* inside a positive lookahead was incorrectly being
1615compiled as implicitly anchored.
1616
161719. Removed all instances of "register" declarations, as they are considered
1618obsolete these days and in any case had become very haphazard.
1619
162020. Add strerror() to pcre2test for failed file opening.
1621
162221. Make pcre2test -C list valgrind support when it is enabled.
1623
162422. Add the use_length modifier to pcre2test.
1625
162623. Fix an off-by-one bug in pcre2test for the list of names for 'get' and
1627'copy' modifiers.
1628
162924. Add PCRE2_CALL_CONVENTION into the prototype declarations in pcre2.h as it
1630is apparently needed there as well as in the function definitions. (Why did
1631nobody ask for this in PCRE1?)
1632
163325. Change the _PCRE2_H and _PCRE2_UCP_H guard macros in the header files to
1634PCRE2_H_IDEMPOTENT_GUARD and PCRE2_UCP_H_IDEMPOTENT_GUARD to be more standard
1635compliant and unique.
1636
163726. pcre2-config --libs-posix was listing -lpcre2posix instead of
1638-lpcre2-posix. Also, the CMake build process was building the library with the
1639wrong name.
1640
164127. In pcre2test, give some offset information for errors in hex patterns.
1642This uses the C99 formatting sequence %td, except for MSVC which doesn't
1643support it - %lu is used instead.
1644
164528. Implemented pcre2_code_copy_with_tables(), and added pushtablescopy to
1646pcre2test for testing it.
1647
164829. Fix small memory leak in pcre2test.
1649
165030. Fix out-of-bounds read for partial matching of /./ against an empty string
1651when the newline type is CRLF.
1652
165331. Fix a bug in pcre2test that caused a crash when a locale was set either in
1654the current pattern or a previous one and a wide character was matched.
1655
165632. The appearance of \p, \P, or \X in a substitution string when
1657PCRE2_SUBSTITUTE_EXTENDED was set caused a segmentation fault (NULL
1658dereference).
1659
166033. If the starting offset was specified as greater than the subject length in
1661a call to pcre2_substitute() an out-of-bounds memory reference could occur.
1662
166334. When PCRE2 was compiled to use the heap instead of the stack for recursive
1664calls to match(), a repeated minimizing caseless back reference, or a
1665maximizing one where the two cases had different numbers of code units,
1666followed by a caseful back reference, could lose the caselessness of the first
1667repeated back reference (example: /(Z)(a)\2{1,2}?(?-i)\1X/i should match ZaAAZX
1668but didn't).
1669
167035. When a pattern is too complicated, PCRE2 gives up trying to find a minimum
1671matching length and just records zero. Typically this happens when there are
1672too many nested or recursive back references. If the limit was reached in
1673certain recursive cases it failed to be triggered and an internal error could
1674be the result.
1675
167636. The pcre2_dfa_match() function now takes note of the recursion limit for
1677the internal recursive calls that are used for lookrounds and recursions within
1678the pattern.
1679
168037. More refactoring has got rid of the internal could_be_empty_branch()
1681function (around 400 lines of code, including comments) by keeping track of
1682could-be-emptiness as the pattern is compiled instead of scanning compiled
1683groups. (This would have been much harder before the refactoring of #3 above.)
1684This lifts a restriction on the number of branches in a group (more than about
16851100 would give "pattern is too complicated").
1686
168738. Add the "-ac" command line option to pcre2test as a synonym for "-pattern
1688auto_callout".
1689
169039. In a library with Unicode support, incorrect data was compiled for a
1691pattern with PCRE2_UCP set without PCRE2_UTF if a class required all wide
1692characters to match (for example, /[\s[:^ascii:]]/).
1693
169440. The callout_error modifier has been added to pcre2test to make it possible
1695to return PCRE2_ERROR_CALLOUT from a callout.
1696
169741. A minor change to pcre2grep: colour reset is now "<esc>[0m" instead of
1698"<esc>[00m".
1699
170042. The limit in the auto-possessification code that was intended to catch
1701overly-complicated patterns and not spend too much time auto-possessifying was
1702being reset too often, resulting in very long compile times for some patterns.
1703Now such patterns are no longer completely auto-possessified.
1704
170543. Applied Jason Hood's revised patch for RunTest.bat.
1706
170744. Added a new Windows script RunGrepTest.bat, courtesy of Jason Hood.
1708
170945. Minor cosmetic fix to pcre2test: move a variable that is not used under
1710Windows into the "not Windows" code.
1711
171246. Applied Jason Hood's patches to upgrade pcre2grep under Windows and tidy
1713some of the code:
1714
1715 * normalised the Windows condition by ensuring WIN32 is defined;
1716 * enables the callout feature under Windows;
1717 * adds globbing (Microsoft's implementation expands quoted args),
1718 using a tweaked opendirectory;
1719 * implements the is_*_tty functions for Windows;
1720 * --color=always will write the ANSI sequences to file;
1721 * add sequences 4 (underline works on Win10) and 5 (blink as bright
1722 background, relatively standard on DOS/Win);
1723 * remove the (char *) casts for the now-const strings;
1724 * remove GREP_COLOUR (grep's command line allowed the 'u', but not
1725 the environment), parsing GREP_COLORS instead;
1726 * uses the current colour if not set, rather than black;
1727 * add print_match for the undefined case;
1728 * fixes a typo.
1729
1730In addition, colour settings containing anything other than digits and
1731semicolon are ignored, and the colour controls are no longer output for empty
1732strings.
1733
173447. Detecting patterns that are too large inside the length-measuring loop
1735saves processing ridiculously long patterns to their end.
1736
173748. Ignore PCRE2_CASELESS when processing \h, \H, \v, and \V in classes as it
1738just wastes time. In the UTF case it can also produce redundant entries in
1739XCLASS lists caused by characters with multiple other cases and pairs of
1740characters in the same "not-x" sublists.
1741
174249. A pattern such as /(?=(a\K))/ can report the end of the match being before
1743its start; pcre2test was not handling this correctly when using the POSIX
1744interface (it was OK with the native interface).
1745
174650. In pcre2grep, ignore all JIT compile errors. This means that pcre2grep will
1747continue to work, falling back to interpretation if anything goes wrong with
1748JIT.
1749
175051. Applied patches from Christian Persch to configure.ac to make use of the
1751AC_USE_SYSTEM_EXTENSIONS macro and to test for functions used by the JIT
1752modules.
1753
175452. Minor fixes to pcre2grep from Jason Hood:
1755 * fixed some spacing;
1756 * Windows doesn't usually use single quotes, so I've added a define
1757 to use appropriate quotes [in an example];
1758 * LC_ALL was displayed as "LCC_ALL";
1759 * numbers 11, 12 & 13 should end in "th";
1760 * use double quotes in usage message.
1761
176253. When autopossessifying, skip empty branches without recursion, to reduce
1763stack usage for the benefit of clang with -fsanitize-address, which uses huge
1764stack frames. Example pattern: /X?(R||){3335}/. Fixes oss-fuzz issue 553.
1765
176654. A pattern with very many explicit back references to a group that is a long
1767way from the start of the pattern could take a long time to compile because
1768searching for the referenced group in order to find the minimum length was
1769being done repeatedly. Now up to 128 group minimum lengths are cached and the
1770attempt to find a minimum length is abandoned if there is a back reference to a
1771group whose number is greater than 128. (In that case, the pattern is so
1772complicated that this optimization probably isn't worth it.) This fixes
1773oss-fuzz issue 557.
1774
177555. Issue 32 for 10.22 below was not correctly fixed. If pcre2grep in multiline
1776mode with --only-matching matched several lines, it restarted scanning at the
1777next line instead of moving on to the end of the matched string, which can be
1778several lines after the start.
1779
178056. Applied Jason Hood's new patch for RunGrepTest.bat that updates it in line
1781with updates to the non-Windows version.
1782
1783
1784
1785Version 10.22 29-July-2016
1786--------------------------
1787
17881. Applied Jason Hood's patches to RunTest.bat and testdata/wintestoutput3
1789to fix problems with running the tests under Windows.
1790
17912. Implemented a facility for quoting literal characters within hexadecimal
1792patterns in pcre2test, to make it easier to create patterns with just a few
1793non-printing characters.
1794
17953. Binary zeros are not supported in pcre2test input files. It now detects them
1796and gives an error.
1797
17984. Updated the valgrind parameters in RunTest: (a) changed smc-check=all to
1799smc-check=all-non-file; (b) changed obj:* in the suppression file to obj:??? so
1800that it matches only unknown objects.
1801
18025. Updated the maintenance script maint/ManyConfigTests to make it easier to
1803select individual groups of tests.
1804
18056. When the POSIX wrapper function regcomp() is called, the REG_NOSUB option
1806used to set PCRE2_NO_AUTO_CAPTURE when calling pcre2_compile(). However, this
1807disables the use of back references (and subroutine calls), which are supported
1808by other implementations of regcomp() with RE_NOSUB. Therefore, REG_NOSUB no
1809longer causes PCRE2_NO_AUTO_CAPTURE to be set, though it still ignores nmatch
1810and pmatch when regexec() is called.
1811
18127. Because of 6 above, pcre2test has been modified with a new modifier called
1813posix_nosub, to call regcomp() with REG_NOSUB. Previously the no_auto_capture
1814modifier had this effect. That option is now ignored when the POSIX API is in
1815use.
1816
18178. Minor tidies to the pcre2demo.c sample program, including more comments
1818about its 8-bit-ness.
1819
18209. Detect unmatched closing parentheses and give the error in the pre-scan
1821instead of later. Previously the pre-scan carried on and could give a
1822misleading incorrect error message. For example, /(?J)(?'a'))(?'a')/ gave a
1823message about invalid duplicate group names.
1824
182510. It has happened that pcre2test was accidentally linked with another POSIX
1826regex library instead of libpcre2-posix. In this situation, a call to regcomp()
1827(in the other library) may succeed, returning zero, but of course putting its
1828own data into the regex_t block. In one example the re_pcre2_code field was
1829left as NULL, which made pcre2test think it had not got a compiled POSIX regex,
1830so it treated the next line as another pattern line, resulting in a confusing
1831error message. A check has been added to pcre2test to see if the data returned
1832from a successful call of regcomp() are valid for PCRE2's regcomp(). If they
1833are not, an error message is output and the pcre2test run is abandoned. The
1834message points out the possibility of a mis-linking. Hopefully this will avoid
1835some head-scratching the next time this happens.
1836
183711. A pattern such as /(?<=((?C)0))/, which has a callout inside a lookbehind
1838assertion, caused pcre2test to output a very large number of spaces when the
1839callout was taken, making the program appearing to loop.
1840
184112. A pattern that included (*ACCEPT) in the middle of a sufficiently deeply
1842nested set of parentheses of sufficient size caused an overflow of the
1843compiling workspace (which was diagnosed, but of course is not desirable).
1844
184513. Detect missing closing parentheses during the pre-pass for group
1846identification.
1847
184814. Changed some integer variable types and put in a number of casts, following
1849a report of compiler warnings from Visual Studio 2013 and a few tests with
1850gcc's -Wconversion (which still throws up a lot).
1851
185215. Implemented pcre2_code_copy(), and added pushcopy and #popcopy to pcre2test
1853for testing it.
1854
185516. Change 66 for 10.21 introduced the use of snprintf() in PCRE2's version of
1856regerror(). When the error buffer is too small, my version of snprintf() puts a
1857binary zero in the final byte. Bug #1801 seems to show that other versions do
1858not do this, leading to bad output from pcre2test when it was checking for
1859buffer overflow. It no longer assumes a binary zero at the end of a too-small
1860regerror() buffer.
1861
186217. Fixed typo ("&&" for "&") in pcre2_study(). Fortunately, this could not
1863actually affect anything, by sheer luck.
1864
186518. Two minor fixes for MSVC compilation: (a) removal of apparently incorrect
1866"const" qualifiers in pcre2test and (b) defining snprintf as _snprintf for
1867older MSVC compilers. This has been done both in src/pcre2_internal.h for most
1868of the library, and also in src/pcre2posix.c, which no longer includes
1869pcre2_internal.h (see 24 below).
1870
187119. Applied Chris Wilson's patch (Bugzilla #1681) to CMakeLists.txt for MSVC
1872static compilation. Subsequently applied Chris Wilson's second patch, putting
1873the first patch under a new option instead of being unconditional when
1874PCRE_STATIC is set.
1875
187620. Updated pcre2grep to set stdout as binary when run under Windows, so as not
1877to convert \r\n at the ends of reflected lines into \r\r\n. This required
1878ensuring that other output that is written to stdout (e.g. file names) uses the
1879appropriate line terminator: \r\n for Windows, \n otherwise.
1880
188121. When a line is too long for pcre2grep's internal buffer, show the maximum
1882length in the error message.
1883
188422. Added support for string callouts to pcre2grep (Zoltan's patch with PH
1885additions).
1886
188723. RunTest.bat was missing a "set type" line for test 22.
1888
188924. The pcre2posix.c file was including pcre2_internal.h, and using some
1890"private" knowledge of the data structures. This is unnecessary; the code has
1891been re-factored and no longer includes pcre2_internal.h.
1892
189325. A racing condition is fixed in JIT reported by Mozilla.
1894
189526. Minor code refactor to avoid "array subscript is below array bounds"
1896compiler warning.
1897
189827. Minor code refactor to avoid "left shift of negative number" warning.
1899
190028. Add a bit more sanity checking to pcre2_serialize_decode() and document
1901that it expects trusted data.
1902
190329. Fix typo in pcre2_jit_test.c
1904
190530. Due to an oversight, pcre2grep was not making use of JIT when available.
1906This is now fixed.
1907
190831. The RunGrepTest script is updated to use the valgrind suppressions file
1909when testing with JIT under valgrind (compare 10.21/51 below). The suppressions
1910file is updated so that is now the same as for PCRE1: it suppresses the
1911Memcheck warnings Addr16 and Cond in unknown objects (that is, JIT-compiled
1912code). Also changed smc-check=all to smc-check=all-non-file as was done for
1913RunTest (see 4 above).
1914
191532. Implemented the PCRE2_NO_JIT option for pcre2_match().
1916
191733. Fix typo that gave a compiler error when JIT not supported.
1918
191934. Fix comment describing the returns from find_fixedlength().
1920
192135. Fix potential negative index in pcre2test.
1922
192336. Calls to pcre2_get_error_message() with error numbers that are never
1924returned by PCRE2 functions were returning empty strings. Now the error code
1925PCRE2_ERROR_BADDATA is returned. A facility has been added to pcre2test to
1926show the texts for given error numbers (i.e. to call pcre2_get_error_message()
1927and display what it returns) and a few representative error codes are now
1928checked in RunTest.
1929
193037. Added "&& !defined(__INTEL_COMPILER)" to the test for __GNUC__ in
1931pcre2_match.c, in anticipation that this is needed for the same reason it was
1932recently added to pcrecpp.cc in PCRE1.
1933
193438. Using -o with -M in pcre2grep could cause unnecessary repeated output when
1935the match extended over a line boundary, as it tried to find more matches "on
1936the same line" - but it was already over the end.
1937
193839. Allow \C in lookbehinds and DFA matching in UTF-32 mode (by converting it
1939to the same code as '.' when PCRE2_DOTALL is set).
1940
194140. Fix two clang compiler warnings in pcre2test when only one code unit width
1942is supported.
1943
194441. Upgrade RunTest to automatically re-run test 2 with a large (64MiB) stack
1945if it fails when running the interpreter with a 16MiB stack (and if changing
1946the stack size via pcre2test is possible). This avoids having to manually set a
1947large stack size when testing with clang.
1948
194942. Fix register overwite in JIT when SSE2 acceleration is enabled.
1950
195143. Detect integer overflow in pcre2test pattern and data repetition counts.
1952
195344. In pcre2test, ignore "allcaptures" after DFA matching.
1954
195545. Fix unaligned accesses on x86. Patch by Marc Mutz.
1956
195746. Fix some more clang compiler warnings.
1958
1959
1960Version 10.21 12-January-2016
1961-----------------------------
1962
19631. Improve matching speed of patterns starting with + or * in JIT.
1964
19652. Use memchr() to find the first character in an unanchored match in 8-bit
1966mode in the interpreter. This gives a significant speed improvement.
1967
19683. Removed a redundant copy of the opcode_possessify table in the
1969pcre2_auto_possessify.c source.
1970
19714. Fix typos in dftables.c for z/OS.
1972
19735. Change 36 for 10.20 broke the handling of [[:>:]] and [[:<:]] in that
1974processing them could involve a buffer overflow if the following character was
1975an opening parenthesis.
1976
19776. Change 36 for 10.20 also introduced a bug in processing this pattern:
1978/((?x)(*:0))#(?'/. Specifically: if a setting of (?x) was followed by a (*MARK)
1979setting (which (*:0) is), then (?x) did not get unset at the end of its group
1980during the scan for named groups, and hence the external # was incorrectly
1981treated as a comment and the invalid (?' at the end of the pattern was not
1982diagnosed. This caused a buffer overflow during the real compile. This bug was
1983discovered by Karl Skomski with the LLVM fuzzer.
1984
19857. Moved the pcre2_find_bracket() function from src/pcre2_compile.c into its
1986own source module to avoid a circular dependency between src/pcre2_compile.c
1987and src/pcre2_study.c
1988
19898. A callout with a string argument containing an opening square bracket, for
1990example /(?C$[$)(?<]/, was incorrectly processed and could provoke a buffer
1991overflow. This bug was discovered by Karl Skomski with the LLVM fuzzer.
1992
19939. The handling of callouts during the pre-pass for named group identification
1994has been tightened up.
1995
199610. The quantifier {1} can be ignored, whether greedy, non-greedy, or
1997possessive. This is a very minor optimization.
1998
199911. A possessively repeated conditional group that could match an empty string,
2000for example, /(?(R))*+/, was incorrectly compiled.
2001
200212. The Unicode tables have been updated to Unicode 8.0.0 (thanks to Christian
2003Persch).
2004
200513. An empty comment (?#) in a pattern was incorrectly processed and could
2006provoke a buffer overflow. This bug was discovered by Karl Skomski with the
2007LLVM fuzzer.
2008
200914. Fix infinite recursion in the JIT compiler when certain patterns such as
2010/(?:|a|){100}x/ are analysed.
2011
201215. Some patterns with character classes involving [: and \\ were incorrectly
2013compiled and could cause reading from uninitialized memory or an incorrect
2014error diagnosis. Examples are: /[[:\\](?<[::]/ and /[[:\\](?'abc')[a:]. The
2015first of these bugs was discovered by Karl Skomski with the LLVM fuzzer.
2016
201716. Pathological patterns containing many nested occurrences of [: caused
2018pcre2_compile() to run for a very long time. This bug was found by the LLVM
2019fuzzer.
2020
202117. A missing closing parenthesis for a callout with a string argument was not
2022being diagnosed, possibly leading to a buffer overflow. This bug was found by
2023the LLVM fuzzer.
2024
202518. A conditional group with only one branch has an implicit empty alternative
2026branch and must therefore be treated as potentially matching an empty string.
2027
202819. If (?R was followed by - or + incorrect behaviour happened instead of a
2029diagnostic. This bug was discovered by Karl Skomski with the LLVM fuzzer.
2030
203120. Another bug that was introduced by change 36 for 10.20: conditional groups
2032whose condition was an assertion preceded by an explicit callout with a string
2033argument might be incorrectly processed, especially if the string contained \Q.
2034This bug was discovered by Karl Skomski with the LLVM fuzzer.
2035
203621. Compiling PCRE2 with the sanitize options of clang showed up a number of
2037very pedantic coding infelicities and a buffer overflow while checking a UTF-8
2038string if the final multi-byte UTF-8 character was truncated.
2039
204022. For Perl compatibility in EBCDIC environments, ranges such as a-z in a
2041class, where both values are literal letters in the same case, omit the
2042non-letter EBCDIC code points within the range.
2043
204423. Finding the minimum matching length of complex patterns with back
2045references and/or recursions can take a long time. There is now a cut-off that
2046gives up trying to find a minimum length when things get too complex.
2047
204824. An optimization has been added that speeds up finding the minimum matching
2049length for patterns containing repeated capturing groups or recursions.
2050
205125. If a pattern contained a back reference to a group whose number was
2052duplicated as a result of appearing in a (?|...) group, the computation of the
2053minimum matching length gave a wrong result, which could cause incorrect "no
2054match" errors. For such patterns, a minimum matching length cannot at present
2055be computed.
2056
205726. Added a check for integer overflow in conditions (?(<digits>) and
2058(?(R<digits>). This omission was discovered by Karl Skomski with the LLVM
2059fuzzer.
2060
206127. Fixed an issue when \p{Any} inside an xclass did not read the current
2062character.
2063
206428. If pcre2grep was given the -q option with -c or -l, or when handling a
2065binary file, it incorrectly wrote output to stdout.
2066
206729. The JIT compiler did not restore the control verb head in case of *THEN
2068control verbs. This issue was found by Karl Skomski with a custom LLVM fuzzer.
2069
207030. The way recursive references such as (?3) are compiled has been re-written
2071because the old way was the cause of many issues. Now, conversion of the group
2072number into a pattern offset does not happen until the pattern has been
2073completely compiled. This does mean that detection of all infinitely looping
2074recursions is postponed till match time. In the past, some easy ones were
2075detected at compile time. This re-writing was done in response to yet another
2076bug found by the LLVM fuzzer.
2077
207831. A test for a back reference to a non-existent group was missing for items
2079such as \987. This caused incorrect code to be compiled. This issue was found
2080by Karl Skomski with a custom LLVM fuzzer.
2081
208232. Error messages for syntax errors following \g and \k were giving inaccurate
2083offsets in the pattern.
2084
208533. Improve the performance of starting single character repetitions in JIT.
2086
208734. (*LIMIT_MATCH=) now gives an error instead of setting the value to 0.
2088
208935. Error messages for syntax errors in *LIMIT_MATCH and *LIMIT_RECURSION now
2090give the right offset instead of zero.
2091
209236. The JIT compiler should not check repeats after a {0,1} repeat byte code.
2093This issue was found by Karl Skomski with a custom LLVM fuzzer.
2094
209537. The JIT compiler should restore the control chain for empty possessive
2096repeats. This issue was found by Karl Skomski with a custom LLVM fuzzer.
2097
209838. A bug which was introduced by the single character repetition optimization
2099was fixed.
2100
210139. Match limit check added to recursion. This issue was found by Karl Skomski
2102with a custom LLVM fuzzer.
2103
210440. Arrange for the UTF check in pcre2_match() and pcre2_dfa_match() to look
2105only at the part of the subject that is relevant when the starting offset is
2106non-zero.
2107
210841. Improve first character match in JIT with SSE2 on x86.
2109
211042. Fix two assertion fails in JIT. These issues were found by Karl Skomski
2111with a custom LLVM fuzzer.
2112
211343. Correct the setting of CMAKE_C_FLAGS in CMakeLists.txt (patch from Roy Ivy
2114III).
2115
211644. Fix bug in RunTest.bat for new test 14, and adjust the script for the added
2117test (there are now 20 in total).
2118
211945. Fixed a corner case of range optimization in JIT.
2120
212146. Add the ${*MARK} facility to pcre2_substitute().
2122
212347. Modifier lists in pcre2test were splitting at spaces without the required
2124commas.
2125
212648. Implemented PCRE2_ALT_VERBNAMES.
2127
212849. Fixed two issues in JIT. These were found by Karl Skomski with a custom
2129LLVM fuzzer.
2130
213150. The pcre2test program has been extended by adding the #newline_default
2132command. This has made it possible to run the standard tests when PCRE2 is
2133compiled with either CR or CRLF as the default newline convention. As part of
2134this work, the new command was added to several test files and the testing
2135scripts were modified. The pcre2grep tests can now also be run when there is no
2136LF in the default newline convention.
2137
213851. The RunTest script has been modified so that, when JIT is used and valgrind
2139is specified, a valgrind suppressions file is set up to ignore "Invalid read of
2140size 16" errors because these are false positives when the hardware supports
2141the SSE2 instruction set.
2142
214352. It is now possible to have comment lines amid the subject strings in
2144pcre2test (and perltest.sh) input.
2145
214653. Implemented PCRE2_USE_OFFSET_LIMIT and pcre2_set_offset_limit().
2147
214854. Add the null_context modifier to pcre2test so that calling pcre2_compile()
2149and the matching functions with NULL contexts can be tested.
2150
215155. Implemented PCRE2_SUBSTITUTE_EXTENDED.
2152
215356. In a character class such as [\W\p{Any}] where both a negative-type escape
2154("not a word character") and a property escape were present, the property
2155escape was being ignored.
2156
215757. Fixed integer overflow for patterns whose minimum matching length is very,
2158very large.
2159
216058. Implemented --never-backslash-C.
2161
216259. Change 55 above introduced a bug by which certain patterns provoked the
2163erroneous error "\ at end of pattern".
2164
216560. The special sequences [[:<:]] and [[:>:]] gave rise to incorrect compiling
2166errors or other strange effects if compiled in UCP mode. Found with libFuzzer
2167and AddressSanitizer.
2168
216961. Whitespace at the end of a pcre2test pattern line caused a spurious error
2170message if there were only single-character modifiers. It should be ignored.
2171
217262. The use of PCRE2_NO_AUTO_CAPTURE could cause incorrect compilation results
2173or segmentation errors for some patterns. Found with libFuzzer and
2174AddressSanitizer.
2175
217663. Very long names in (*MARK) or (*THEN) etc. items could provoke a buffer
2177overflow.
2178
217964. Improve error message for overly-complicated patterns.
2180
218165. Implemented an optional replication feature for patterns in pcre2test, to
2182make it easier to test long repetitive patterns. The tests for 63 above are
2183converted to use the new feature.
2184
218566. In the POSIX wrapper, if regerror() was given too small a buffer, it could
2186misbehave.
2187
218867. In pcre2_substitute() in UTF mode, the UTF validity check on the
2189replacement string was happening before the length setting when the replacement
2190string was zero-terminated.
2191
219268. In pcre2_substitute() in UTF mode, PCRE2_NO_UTF_CHECK can be set for the
2193second and subsequent calls to pcre2_match().
2194
219569. There was no check for integer overflow for a replacement group number in
2196pcre2_substitute(). An added check for a number greater than the largest group
2197number in the pattern means this is not now needed.
2198
219970. The PCRE2-specific VERSION condition didn't work correctly if only one
2200digit was given after the decimal point, or if more than two digits were given.
2201It now works with one or two digits, and gives a compile time error if more are
2202given.
2203
220471. In pcre2_substitute() there was the possibility of reading one code unit
2205beyond the end of the replacement string.
2206
220772. The code for checking a subject's UTF-32 validity for a pattern with a
2208lookbehind involved an out-of-bounds pointer, which could potentially cause
2209trouble in some environments.
2210
221173. The maximum lookbehind length was incorrectly calculated for patterns such
2212as /(?<=(a)(?-1))x/ which have a recursion within a backreference.
2213
221474. Give an error if a lookbehind assertion is longer than 65535 code units.
2215
221675. Give an error in pcre2_substitute() if a match ends before it starts (as a
2217result of the use of \K).
2218
221976. Check the length of subpattern names and the names in (*MARK:xx) etc.
2220dynamically to avoid the possibility of integer overflow.
2221
222277. Implement pcre2_set_max_pattern_length() so that programs can restrict the
2223size of patterns that they are prepared to handle.
2224
222578. (*NO_AUTO_POSSESS) was not working.
2226
222779. Adding group information caching improves the speed of compiling when
2228checking whether a group has a fixed length and/or could match an empty string,
2229especially when recursion or subroutine calls are involved. However, this
2230cannot be used when (?| is present in the pattern because the same number may
2231be used for groups of different sizes. To catch runaway patterns in this
2232situation, counts have been introduced to the functions that scan for empty
2233branches or compute fixed lengths.
2234
223580. Allow for the possibility of the size of the nest_save structure not being
2236a factor of the size of the compiling workspace (it currently is).
2237
223881. Check for integer overflow in minimum length calculation and cap it at
223965535.
2240
224182. Small optimizations in code for finding the minimum matching length.
2242
224383. Lock out configuring for EBCDIC with non-8-bit libraries.
2244
224584. Test for error code <= 0 in regerror().
2246
224785. Check for too many replacements (more than INT_MAX) in pcre2_substitute().
2248
224986. Avoid the possibility of computing with an out-of-bounds pointer (though
2250not dereferencing it) while handling lookbehind assertions.
2251
225287. Failure to get memory for the match data in regcomp() is now given as a
2253regcomp() error instead of waiting for regexec() to pick it up.
2254
225588. In pcre2_substitute(), ensure that CRLF is not split when it is a valid
2256newline sequence.
2257
225889. Paranoid check in regcomp() for bad error code from pcre2_compile().
2259
226090. Run test 8 (internal offsets and code sizes) for link sizes 3 and 4 as well
2261as for link size 2.
2262
226391. Document that JIT has a limit on pattern size, and give more information
2264about JIT compile failures in pcre2test.
2265
226692. Implement PCRE2_INFO_HASBACKSLASHC.
2267
226893. Re-arrange valgrind support code in pcre2test to avoid spurious reports
2269with JIT (possibly caused by SSE2?).
2270
227194. Support offset_limit in JIT.
2272
227395. A sequence such as [[:punct:]b] that is, a POSIX character class followed
2274by a single ASCII character in a class item, was incorrectly compiled in UCP
2275mode. The POSIX class got lost, but only if the single character followed it.
2276
227796. [:punct:] in UCP mode was matching some characters in the range 128-255
2278that should not have been matched.
2279
228097. If [:^ascii:] or [:^xdigit:] are present in a non-negated class, all
2281characters with code points greater than 255 are in the class. When a Unicode
2282property was also in the class (if PCRE2_UCP is set, escapes such as \w are
2283turned into Unicode properties), wide characters were not correctly handled,
2284and could fail to match.
2285
228698. In pcre2test, make the "startoffset" modifier a synonym of "offset",
2287because it sets the "startoffset" parameter for pcre2_match().
2288
228999. If PCRE2_AUTO_CALLOUT was set on a pattern that had a (?# comment between
2290an item and its qualifier (for example, A(?#comment)?B) pcre2_compile()
2291misbehaved. This bug was found by the LLVM fuzzer.
2292
2293100. The error for an invalid UTF pattern string always gave the code unit
2294offset as zero instead of where the invalidity was found.
2295
2296101. Further to 97 above, negated classes such as [^[:^ascii:]\d] were also not
2297working correctly in UCP mode.
2298
2299102. Similar to 99 above, if an isolated \E was present between an item and its
2300qualifier when PCRE2_AUTO_CALLOUT was set, pcre2_compile() misbehaved. This bug
2301was found by the LLVM fuzzer.
2302
2303103. The POSIX wrapper function regexec() crashed if the option REG_STARTEND
2304was set when the pmatch argument was NULL. It now returns REG_INVARG.
2305
2306104. Allow for up to 32-bit numbers in the ordin() function in pcre2grep.
2307
2308105. An empty \Q\E sequence between an item and its qualifier caused
2309pcre2_compile() to misbehave when auto callouts were enabled. This bug
2310was found by the LLVM fuzzer.
2311
2312106. If both PCRE2_ALT_VERBNAMES and PCRE2_EXTENDED were set, and a (*MARK) or
2313other verb "name" ended with whitespace immediately before the closing
2314parenthesis, pcre2_compile() misbehaved. Example: /(*:abc )/, but only when
2315both those options were set.
2316
2317107. In a number of places pcre2_compile() was not handling NULL characters
2318correctly, and pcre2test with the "bincode" modifier was not always correctly
2319displaying fields containing NULLS:
2320
2321 (a) Within /x extended #-comments
2322 (b) Within the "name" part of (*MARK) and other *verbs
2323 (c) Within the text argument of a callout
2324
2325108. If a pattern that was compiled with PCRE2_EXTENDED started with white
2326space or a #-type comment that was followed by (?-x), which turns off
2327PCRE2_EXTENDED, and there was no subsequent (?x) to turn it on again,
2328pcre2_compile() assumed that (?-x) applied to the whole pattern and
2329consequently mis-compiled it. This bug was found by the LLVM fuzzer. The fix
2330for this bug means that a setting of any of the (?imsxJU) options at the start
2331of a pattern is no longer transferred to the options that are returned by
2332PCRE2_INFO_ALLOPTIONS. In fact, this was an anachronism that should have
2333changed when the effects of those options were all moved to compile time.
2334
2335109. An escaped closing parenthesis in the "name" part of a (*verb) when
2336PCRE2_ALT_VERBNAMES was set caused pcre2_compile() to malfunction. This bug
2337was found by the LLVM fuzzer.
2338
2339110. Implemented PCRE2_SUBSTITUTE_UNSET_EMPTY, and updated pcre2test to make it
2340possible to test it.
2341
2342111. "Harden" pcre2test against ridiculously large values in modifiers and
2343command line arguments.
2344
2345112. Implemented PCRE2_SUBSTITUTE_UNKNOWN_UNSET and PCRE2_SUBSTITUTE_OVERFLOW_
2346LENGTH.
2347
2348113. Fix printing of *MARK names that contain binary zeroes in pcre2test.
2349
2350
2351Version 10.20 30-June-2015
2352--------------------------
2353
23541. Callouts with string arguments have been added.
2355
23562. Assertion code generator in JIT has been optimized.
2357
23583. The invalid pattern (?(?C) has a missing assertion condition at the end. The
2359pcre2_compile() function read past the end of the input before diagnosing an
2360error. This bug was discovered by the LLVM fuzzer.
2361
23624. Implemented pcre2_callout_enumerate().
2363
23645. Fix JIT compilation of conditional blocks whose assertion is converted to
2365(*FAIL). E.g: /(?(?!))/.
2366
23676. The pattern /(?(?!)^)/ caused references to random memory. This bug was
2368discovered by the LLVM fuzzer.
2369
23707. The assertion (?!) is optimized to (*FAIL). This was not handled correctly
2371when this assertion was used as a condition, for example (?(?!)a|b). In
2372pcre2_match() it worked by luck; in pcre2_dfa_match() it gave an incorrect
2373error about an unsupported item.
2374
23758. For some types of pattern, for example /Z*(|d*){216}/, the auto-
2376possessification code could take exponential time to complete. A recursion
2377depth limit of 1000 has been imposed to limit the resources used by this
2378optimization. This infelicity was discovered by the LLVM fuzzer.
2379
23809. A pattern such as /(*UTF)[\S\V\H]/, which contains a negated special class
2381such as \S in non-UCP mode, explicit wide characters (> 255) can be ignored
2382because \S ensures they are all in the class. The code for doing this was
2383interacting badly with the code for computing the amount of space needed to
2384compile the pattern, leading to a buffer overflow. This bug was discovered by
2385the LLVM fuzzer.
2386
238710. A pattern such as /((?2)+)((?1))/ which has mutual recursion nested inside
2388other kinds of group caused stack overflow at compile time. This bug was
2389discovered by the LLVM fuzzer.
2390
239111. A pattern such as /(?1)(?#?'){8}(a)/ which had a parenthesized comment
2392between a subroutine call and its quantifier was incorrectly compiled, leading
2393to buffer overflow or other errors. This bug was discovered by the LLVM fuzzer.
2394
239512. The illegal pattern /(?(?<E>.*!.*)?)/ was not being diagnosed as missing an
2396assertion after (?(. The code was failing to check the character after (?(?<
2397for the ! or = that would indicate a lookbehind assertion. This bug was
2398discovered by the LLVM fuzzer.
2399
240013. A pattern such as /X((?2)()*+){2}+/ which has a possessive quantifier with
2401a fixed maximum following a group that contains a subroutine reference was
2402incorrectly compiled and could trigger buffer overflow. This bug was discovered
2403by the LLVM fuzzer.
2404
240514. Negative relative recursive references such as (?-7) to non-existent
2406subpatterns were not being diagnosed and could lead to unpredictable behaviour.
2407This bug was discovered by the LLVM fuzzer.
2408
240915. The bug fixed in 14 was due to an integer variable that was unsigned when
2410it should have been signed. Some other "int" variables, having been checked,
2411have either been changed to uint32_t or commented as "must be signed".
2412
241316. A mutual recursion within a lookbehind assertion such as (?<=((?2))((?1)))
2414caused a stack overflow instead of the diagnosis of a non-fixed length
2415lookbehind assertion. This bug was discovered by the LLVM fuzzer.
2416
241717. The use of \K in a positive lookbehind assertion in a non-anchored pattern
2418(e.g. /(?<=\Ka)/) could make pcre2grep loop.
2419
242018. There was a similar problem to 17 in pcre2test for global matches, though
2421the code there did catch the loop.
2422
242319. If a greedy quantified \X was preceded by \C in UTF mode (e.g. \C\X*),
2424and a subsequent item in the pattern caused a non-match, backtracking over the
2425repeated \X did not stop, but carried on past the start of the subject, causing
2426reference to random memory and/or a segfault. There were also some other cases
2427where backtracking after \C could crash. This set of bugs was discovered by the
2428LLVM fuzzer.
2429
243020. The function for finding the minimum length of a matching string could take
2431a very long time if mutual recursion was present many times in a pattern, for
2432example, /((?2){73}(?2))((?1))/. A better mutual recursion detection method has
2433been implemented. This infelicity was discovered by the LLVM fuzzer.
2434
243521. Implemented PCRE2_NEVER_BACKSLASH_C.
2436
243722. The feature for string replication in pcre2test could read from freed
2438memory if the replication required a buffer to be extended, and it was not
2439working properly in 16-bit and 32-bit modes. This issue was discovered by a
2440fuzzer: see http://lcamtuf.coredump.cx/afl/.
2441
244223. Added the PCRE2_ALT_CIRCUMFLEX option.
2443
244424. Adjust the treatment of \8 and \9 to be the same as the current Perl
2445behaviour.
2446
244725. Static linking against the PCRE2 library using the pkg-config module was
2448failing on missing pthread symbols.
2449
245026. If a group that contained a recursive back reference also contained a
2451forward reference subroutine call followed by a non-forward-reference
2452subroutine call, for example /.((?2)(?R)\1)()/, pcre2_compile() failed to
2453compile correct code, leading to undefined behaviour or an internally detected
2454error. This bug was discovered by the LLVM fuzzer.
2455
245627. Quantification of certain items (e.g. atomic back references) could cause
2457incorrect code to be compiled when recursive forward references were involved.
2458For example, in this pattern: /(?1)()((((((\1++))\x85)+)|))/. This bug was
2459discovered by the LLVM fuzzer.
2460
246128. A repeated conditional group whose condition was a reference by name caused
2462a buffer overflow if there was more than one group with the given name. This
2463bug was discovered by the LLVM fuzzer.
2464
246529. A recursive back reference by name within a group that had the same name as
2466another group caused a buffer overflow. For example: /(?J)(?'d'(?'d'\g{d}))/.
2467This bug was discovered by the LLVM fuzzer.
2468
246930. A forward reference by name to a group whose number is the same as the
2470current group, for example in this pattern: /(?|(\k'Pm')|(?'Pm'))/, caused a
2471buffer overflow at compile time. This bug was discovered by the LLVM fuzzer.
2472
247331. Fix -fsanitize=undefined warnings for left shifts of 1 by 31 (it treats 1
2474as an int; fixed by writing it as 1u).
2475
247632. Fix pcre2grep compile when -std=c99 is used with gcc, though it still gives
2477a warning for "fileno" unless -std=gnu99 us used.
2478
247933. A lookbehind assertion within a set of mutually recursive subpatterns could
2480provoke a buffer overflow. This bug was discovered by the LLVM fuzzer.
2481
248234. Give an error for an empty subpattern name such as (?'').
2483
248435. Make pcre2test give an error if a pattern that follows #forbud_utf contains
2485\P, \p, or \X.
2486
248736. The way named subpatterns are handled has been refactored. There is now a
2488pre-pass over the regex which does nothing other than identify named
2489subpatterns and count the total captures. This means that information about
2490named patterns is known before the rest of the compile. In particular, it means
2491that forward references can be checked as they are encountered. Previously, the
2492code for handling forward references was contorted and led to several errors in
2493computing the memory requirements for some patterns, leading to buffer
2494overflows.
2495
249637. There was no check for integer overflow in subroutine calls such as (?123).
2497
249838. The table entry for \l in EBCDIC environments was incorrect, leading to its
2499being treated as a literal 'l' instead of causing an error.
2500
250139. If a non-capturing group containing a conditional group that could match
2502an empty string was repeated, it was not identified as matching an empty string
2503itself. For example: /^(?:(?(1)x|)+)+$()/.
2504
250540. In an EBCDIC environment, pcretest was mishandling the escape sequences
2506\a and \e in test subject lines.
2507
250841. In an EBCDIC environment, \a in a pattern was converted to the ASCII
2509instead of the EBCDIC value.
2510
251142. The handling of \c in an EBCDIC environment has been revised so that it is
2512now compatible with the specification in Perl's perlebcdic page.
2513
251443. Single character repetition in JIT has been improved. 20-30% speedup
2515was achieved on certain patterns.
2516
251744. The EBCDIC character 0x41 is a non-breaking space, equivalent to 0xa0 in
2518ASCII/Unicode. This has now been added to the list of characters that are
2519recognized as white space in EBCDIC.
2520
252145. When PCRE2 was compiled without Unicode support, the use of \p and \P gave
2522an error (correctly) when used outside a class, but did not give an error
2523within a class.
2524
252546. \h within a class was incorrectly compiled in EBCDIC environments.
2526
252747. JIT should return with error when the compiled pattern requires
2528more stack space than the maximum.
2529
253048. Fixed a memory leak in pcre2grep when a locale is set.
2531
2532
2533Version 10.10 06-March-2015
2534---------------------------
2535
25361. When a pattern is compiled, it remembers the highest back reference so that
2537when matching, if the ovector is too small, extra memory can be obtained to
2538use instead. A conditional subpattern whose condition is a check on a capture
2539having happened, such as, for example in the pattern /^(?:(a)|b)(?(1)A|B)/, is
2540another kind of back reference, but it was not setting the highest
2541backreference number. This mattered only if pcre2_match() was called with an
2542ovector that was too small to hold the capture, and there was no other kind of
2543back reference (a situation which is probably quite rare). The effect of the
2544bug was that the condition was always treated as FALSE when the capture could
2545not be consulted, leading to a incorrect behaviour by pcre2_match(). This bug
2546has been fixed.
2547
25482. Functions for serialization and deserialization of sets of compiled patterns
2549have been added.
2550
25513. The value that is returned by PCRE2_INFO_SIZE has been corrected to remove
2552excess code units at the end of the data block that may occasionally occur if
2553the code for calculating the size over-estimates. This change stops the
2554serialization code copying uninitialized data, to which valgrind objects. The
2555documentation of PCRE2_INFO_SIZE was incorrect in stating that the size did not
2556include the general overhead. This has been corrected.
2557
25584. All code units in every slot in the table of group names are now set, again
2559in order to avoid accessing uninitialized data when serializing.
2560
25615. The (*NO_JIT) feature is implemented.
2562
25636. If a bug that caused pcre2_compile() to use more memory than allocated was
2564triggered when using valgrind, the code in (3) above passed a stupidly large
2565value to valgrind. This caused a crash instead of an "internal error" return.
2566
25677. A reference to a duplicated named group (either a back reference or a test
2568for being set in a conditional) that occurred in a part of the pattern where
2569PCRE2_DUPNAMES was not set caused the amount of memory needed for the pattern
2570to be incorrectly calculated, leading to overwriting.
2571
25728. A mutually recursive set of back references such as (\2)(\1) caused a
2573segfault at compile time (while trying to find the minimum matching length).
2574The infinite loop is now broken (with the minimum length unset, that is, zero).
2575
25769. If an assertion that was used as a condition was quantified with a minimum
2577of zero, matching went wrong. In particular, if the whole group had unlimited
2578repetition and could match an empty string, a segfault was likely. The pattern
2579(?(?=0)?)+ is an example that caused this. Perl allows assertions to be
2580quantified, but not if they are being used as conditions, so the above pattern
2581is faulted by Perl. PCRE2 has now been changed so that it also rejects such
2582patterns.
2583
258410. The error message for an invalid quantifier has been changed from "nothing
2585to repeat" to "quantifier does not follow a repeatable item".
2586
258711. If a bad UTF string is compiled with NO_UTF_CHECK, it may succeed, but
2588scanning the compiled pattern in subsequent auto-possessification can get out
2589of step and lead to an unknown opcode. Previously this could have caused an
2590infinite loop. Now it generates an "internal error" error. This is a tidyup,
2591not a bug fix; passing bad UTF with NO_UTF_CHECK is documented as having an
2592undefined outcome.
2593
259412. A UTF pattern containing a "not" match of a non-ASCII character and a
2595subroutine reference could loop at compile time. Example: /[^\xff]((?1))/.
2596
259713. The locale test (RunTest 3) has been upgraded. It now checks that a locale
2598that is found in the output of "locale -a" can actually be set by pcre2test
2599before it is accepted. Previously, in an environment where a locale was listed
2600but would not set (an example does exist), the test would "pass" without
2601actually doing anything. Also the fr_CA locale has been added to the list of
2602locales that can be used.
2603
260414. Fixed a bug in pcre2_substitute(). If a replacement string ended in a
2605capturing group number without parentheses, the last character was incorrectly
2606literally included at the end of the replacement string.
2607
260815. A possessive capturing group such as (a)*+ with a minimum repeat of zero
2609failed to allow the zero-repeat case if pcre2_match() was called with an
2610ovector too small to capture the group.
2611
261216. Improved error message in pcre2test when setting the stack size (-S) fails.
2613
261417. Fixed two bugs in CMakeLists.txt: (1) Some lines had got lost in the
2615transfer from PCRE1, meaning that CMake configuration failed if "build tests"
2616was selected. (2) The file src/pcre2_serialize.c had not been added to the list
2617of PCRE2 sources, which caused a failure to build pcre2test.
2618
261918. Fixed typo in pcre2_serialize.c (DECL instead of DEFN) that causes problems
2620only on Windows.
2621
262219. Use binary input when reading back saved serialized patterns in pcre2test.
2623
262420. Added RunTest.bat for running the tests under Windows.
2625
262621. "make distclean" was not removing config.h, a file that may be created for
2627use with CMake.
2628
262922. A pattern such as "((?2){0,1999}())?", which has a group containing a
2630forward reference repeated a large (but limited) number of times within a
2631repeated outer group that has a zero minimum quantifier, caused incorrect code
2632to be compiled, leading to the error "internal error: previously-checked
2633referenced subpattern not found" when an incorrect memory address was read.
2634This bug was reported as "heap overflow", discovered by Kai Lu of Fortinet's
2635FortiGuard Labs. (Added 24-March-2015: CVE-2015-2325 was given to this.)
2636
263723. A pattern such as "((?+1)(\1))/" containing a forward reference subroutine
2638call within a group that also contained a recursive back reference caused
2639incorrect code to be compiled. This bug was reported as "heap overflow",
2640discovered by Kai Lu of Fortinet's FortiGuard Labs. (Added 24-March-2015:
2641CVE-2015-2326 was given to this.)
2642
264324. Computing the size of the JIT read-only data in advance has been a source
2644of various issues, and new ones are still appear unfortunately. To fix
2645existing and future issues, size computation is eliminated from the code,
2646and replaced by on-demand memory allocation.
2647
264825. A pattern such as /(?i)[A-`]/, where characters in the other case are
2649adjacent to the end of the range, and the range contained characters with more
2650than one other case, caused incorrect behaviour when compiled in UTF mode. In
2651that example, the range a-j was left out of the class.
2652
2653
2654Version 10.00 05-January-2015
2655-----------------------------
2656
2657Version 10.00 is the first release of PCRE2, a revised API for the PCRE
2658library. Changes prior to 10.00 are logged in the ChangeLog file for the old
2659API, up to item 20 for release 8.36.
2660
2661The code of the library was heavily revised as part of the new API
2662implementation. Details of each and every modification were not individually
2663logged. In addition to the API changes, the following changes were made. They
2664are either new functionality, or bug fixes and other noticeable changes of
2665behaviour that were implemented after the code had been forked.
2666
26671. Including Unicode support at build time is now enabled by default, but it
2668can optionally be disabled. It is not enabled by default at run time (no
2669change).
2670
26712. The test program, now called pcre2test, was re-specified and almost
2672completely re-written. Its input is not compatible with input for pcretest.
2673
26743. Patterns may start with (*NOTEMPTY) or (*NOTEMPTY_ATSTART) to set the
2675PCRE2_NOTEMPTY or PCRE2_NOTEMPTY_ATSTART options for every subject line that is
2676matched by that pattern.
2677
26784. For the benefit of those who use PCRE2 via some other application, that is,
2679not writing the function calls themselves, it is possible to check the PCRE2
2680version by matching a pattern such as /(?(VERSION>=10)yes|no)/ against a
2681string such as "yesno".
2682
26835. There are case-equivalent Unicode characters whose encodings use different
2684numbers of code units in UTF-8. U+023A and U+2C65 are one example. (It is
2685theoretically possible for this to happen in UTF-16 too.) If a backreference to
2686a group containing one of these characters was greedily repeated, and during
2687the match a backtrack occurred, the subject might be backtracked by the wrong
2688number of code units. For example, if /^(\x{23a})\1*(.)/ is matched caselessly
2689(and in UTF-8 mode) against "\x{23a}\x{2c65}\x{2c65}\x{2c65}", group 2 should
2690capture the final character, which is the three bytes E2, B1, and A5 in UTF-8.
2691Incorrect backtracking meant that group 2 captured only the last two bytes.
2692This bug has been fixed; the new code is slower, but it is used only when the
2693strings matched by the repetition are not all the same length.
2694
26956. A pattern such as /()a/ was not setting the "first character must be 'a'"
2696information. This applied to any pattern with a group that matched no
2697characters, for example: /(?:(?=.)|(?<!x))a/.
2698
26997. When an (*ACCEPT) is triggered inside capturing parentheses, it arranges for
2700those parentheses to be closed with whatever has been captured so far. However,
2701it was failing to mark any other groups between the highest capture so far and
2702the currrent group as "unset". Thus, the ovector for those groups contained
2703whatever was previously there. An example is the pattern /(x)|((*ACCEPT))/ when
2704matched against "abcd".
2705
27068. The pcre2_substitute() function has been implemented.
2707
27089. If an assertion used as a condition was quantified with a minimum of zero
2709(an odd thing to do, but it happened), SIGSEGV or other misbehaviour could
2710occur.
2711
271210. The PCRE2_NO_DOTSTAR_ANCHOR option has been implemented.
2713
2714****