Pcre2

Latest version: v0.5.2

Safety actively analyzes 714736 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 1 of 4

10.45

-------------------------

1. (418) Change 6 of 10.44 broke 32-bit tests because pcre2test's reporting of
memory size was changed to the entire compiled data block, instead of just the
pattern and tables data, so as to align with the new length restriction.
Because the block's header contains pointers, this meant the pcre2test output
was different in 32-bit mode. A patch by Carlo reverts to the previous state
and makes sure that any limit set by pcre2_set_max_pattern_compiled_length()
also avoids the internal struct overhead.

2. (416, 622) Updates to build.zig.

3. (427, et al.) Various fixes to pacify static analyzers.

4. (428) Add --posix-pattern-file to pcre2grep to allow processing of empty
patterns through the -f option, as well as patterns that end in space
characters, for compatibility with other grep tools.

5. (4fa5b8bd) Fix a bug in the fuzz support quantifier-limiting code. It ignores
strings of more than 5 digits because they are necessarily numbers greater than
65535, the largest legal quantifier. However, it wasn't ignoring non-significant
leading zeros.

6. (6d82f0cd) The case-independent processing of the letter-matching Unicode
properties Ll, Lt, and Lu have been changed to match Perl (which changed a while
ago). When caseless matching is in force, all three of these properties are now
treated as Lc (cased letter).

7. (433) The pcre2_jit_compile() function was updated by the addition of a new
option PCRE2_JIT_TEST_ALLOC which, if called with a NULL first argument, tests
not only the availability of JIT, but also its ability to allocate executable
memory. Update pcre2test to use this support to extend the -C option.

8. (75b1025a) The code for parsing Unicode property descriptions for \p and \P
been changed as follows:

. White space etc. before ^ in a negated value such as \p{ ^L } was not being
ignored.

. The code wouldn't have worked if PCRE2 was compiled for UTF-8 support
within an EBCDIC environment. Possibly nobody does this any more, but it
should now work.

. The documentation of the syntax of what can follow \p and \P has been
updated.

9. (1c24ba01) There was an error in the table of lengths for parsed items for
the OPTIONS item, but fortuitously it could never have actually bitten. While
fixing this, some other code that could never be obeyed was discovered and
removed.

10. (674b6640) Removed some incorect optimization code from DFA matching that
has been there since PCRE1, but has just been found to cause a no match return
instead of a partial match in some cases. It involves partial matching when (*F)
is present so is unlikely to have actually affected anyone.

11. (b0f4ac17) Tidy the wording and formatting of some pcre2test error messages
concerned with bad modifiers. Also restrict single-letter modifier sequences to
the first item in a modifier list, as documented and always intended.

12. (1415565c) An iterator at the end of many assertions can always be
auto-possessified, but not at the end of variable-length lookbehinds. There was
a bug in the code that checks for such a lookbehind; it was looking only at the
first branch, which is wrong because some branches can be fixed length when
others are not, for example (?<=AB|CD?). Now all branches are checked for
variability.

13. (ead08288) Matching with pcre2_match() could give an incorrect result if a
variable-length lookbehind was used as the condition in a conditional group.
The condition could erroneously be treated as true if a branch matched but
overran the current position. This bug was in the interpreter only; matching
with JIT was correct.

14. (443) Split out the sljit sub-project into a "Git submodule". Git users
must now run `git submodule init; git submodule update` after a Git checkout, or
the build will fail due to missing files in deps/sljit.

15. (441) Add a new error code (PCRE2_ERROR_JIT_UNSUPPORTED) which is yielded
for unsupported jit features.

16. (444) Fix bug in 'first code unit' and 'last code unit' optimization
combined with lookahead assertions.

17. (445, 447, 449, 451, 452, 459, 563) Add a new feature called scan
substring. This feature is a new type of assertion which matches the content of
a capturing block to a sub-pattern.

18. (450) Improvements to 'first code unit' / 'starting code units'
optimisation.

19. (455) Many, many improvements to the JIT compiler.

20. Item 43 of 10.43 was incomplete because it addressed only \z and not \Z,
which was still misbehaving when matching fragments inside invalid UTF strings.

21. (d29e7290) Octal escapes of the form \045 or \111 were not being recognized
in substitution strings, and if encountered gave an error, though the \o{...}
form was recognized. This bug is now fixed.

22. (463, 487) Fix 1 byte out-of-bounds read when parsing malformed limits
(e.g. LIMIT_HEAP)

23. Many improvements to test infrastructure. Many more platforms and
configurations are now run in Continuous Integration, and all the platforms now
run the full test suite, rather than a partial subset.

24. (475) Implement title casing in substitution strings using Perl syntax.

25. (478, 504) Disallow \x if not followed by { or a hex digit.

26. (473) Implements Python-style backrefs in substitutions.

27. (472) Fix error reporting for certain over-large octal escapes.

28. (482) Fix parsing of named captures in replacement strings, allowing
non-ASCII capture names to be used.

29. (477, 474, 488, 494, 496, 506, 508, 511, 518, 524, 540) Many
improvements to parsing and optimising of character classes.

30. (483, 498) Add support for \g<n> and $<name> to replacement strings.

31. (470) Add option flags PCRE2_EXTRA_NO_BS0 and PCRE2_EXTRA_PYTHON_OCTAL.

32. (471) Add new API function pcre2_set_optimize() for controlling which
optimizations are enabled.

33. (491) Adds $& $` $' and $_ to substitution replacements, as well as
interpreting \b and \v as characters.

34. (499) Add option PCRE2_EXTRA_NEVER_CALLOUT to disable callouts.

35. (503, 513) Update Unicode support to UCD 16.

36. (512, 618, 638) Add new function pcre2_set_substitute_case_callout() to
allow clients to provide a custom callback with locale-aware case
transformation.

37. (516) Fix case-insensitive matching of backreferences when using the
PCRE2_EXTRA_CASELESS_RESTRICT option.

38. (519) In pcre2grep, add $& as an alias for $0

39. (c9bf8339, 534) Updated perltest.sh to enable locale setting.

40. (521) Add support for Turkish I casefolding, using new options
PCRE2_EXTRA_TURKISH_CASING, and added pre-pattern flags (*TURKISH_CASING) and
(*CASELESS_RESTRICT).

41. (523, 546, 547) Add support for UTS18 compatible character classes,
using the new option PCRE2_ALT_EXTENDED_CLASS. This adds '[' as a metacharacter
within character classes and the operators '&&', '--' and '~~', allowing
subtractions and intersections of character classes to be easily expressed.

42. (553, 586, 596, 597) Add support for Perl-style extended character
classes, using the syntax (?[...]). This also allows expressing subtractions and
intersections of character classes, but using a different syntax to UTS18.

43. (554) Fixed a bug in JIT affecting greedy bounded repeats. The upper limit
of repeats inside a repeated bracket might be incorrectly checked.

44. (556) Fixed a bug in JIT affecting caseful matching of backreferences. When
utf is disabled, and dupnames is enabled, caseless matching was used even
if caseful matching was needed.

45. (f34fc0a3) Fixed a bug in pcre2grep reported by Alejandro Colomar
<alxkernel.org> (GitHub issue 577). In certain cases, when lines of above and
below context were contiguous, a separator line was incorrectly being inserted.

46. (594) Fix a small (one/two byte) out-of-bounds read on invalid UTF-8 input
in pcre2grep.

47. (370) Fix the INSTALL_MSVC_PDB CMake flag.

48. (366) Install cmake files in prefix/lib/cmake/pcre2 rather than
prefix/cmake. The new CMake flag PCRE2_INSTALL_CMAKEDIR allows customising this
location.

49. (624, 626, 628, 632, 639, 641) Reduce code size of generated JIT code
for repeated character classes.

50. (623) Update the Bazel build files.

10.44

--------------------------

1. If a pattern contained a variable-length lookbehind in which the first
branch was not the one with the shortest minimum length, and the lookbehind
contained a capturing group, and elsewhere in the pattern there was another
lookbehind that referenced that group, the pattern was incorrectly compiled,
leading to unpredictable results, including crashes in JIT compiling. An
example pattern is: /(((?<=123?456456|ABC)))(?<=\2)/

2. Further updates to the oss-fuzz support:

(a) Limit quantifiers for groups and classes to be no more than 10. This
avoids very long JIT compile times that happen in some cases when groups
are replicated for quantification, and very long match times when
classes contain a lot of non-ascii characters.

(b) Added PCRE2_EXTENDED_MORE to the list of allowed options.

(c) Arranged for text error messages to be shown in 16-bit and 32-bit modes.

(d) Made the output in standalone mode more readable.

(e) General code tidies.

(f) Limit the size of compiled patterns to 10MB (see 6 below).

(g) Do not run JIT on patterns whose compiled length is greater than 200K
bytes because this takes a long time, causing oss-fuzz to time out.

(h) Avoid compiling or matching twice with the same options (this could
happen if the input didn't set any options).

3. Increase the maximum length of a name for a group from 32 to 128 because
there is a user for whom 32 is too small.

4. Cause pcre2test to output a message when pcre2_jit_compile() gives an error
return if either jitverify or info is specified.

5. Some auxiliary files for building under OpenVMS that were contributed by
Alexey Chupahin have been installed.

6. Added pcre2_set_max_pattern_compiled_length() to limit the size of compiled
patterns.

7. There was a bug in the implementation of \X caused by my (PH) misreading or
misunderstanding one of the grapheme sequence breaking rules in Unicode Annex
29. A break should occur between two characters with the Extended Pictographic
break property unless a zero-width joiner intervenes. PCRE2 was not insisting
on the ZWJ, causing \X to match more than it should. See GitHub issue 410.

8. Avoid compilation issues with proprietary compilers in UNIX since 10.43.

10.43

------------------------------

1. The test program added by change 2 of 10.42 didn't work when the default
newline setting didn't include \n as a newline. One test needed (*LF) to ensure
that it worked.

2. Added the new freestanding POSIX test program to the ManyConfigTests script
in the maint directory (overlooked in 2 below). Also improved the selection
facilities in that script, and added a test with JIT in a non-source directory,
fixing an oversight that would have made such a test fail before.

3. Added pcre2_get_match_data_heapframes_size() and related pcre2test flags
to allow for finer control of the heap used when pcre2_match() without JIT is
used and the match_data might be reused. This began as PR 191, but has had
further refinement and documentation edits.

4. Applied PR 181, which tidies some casts in pcre2_valid_utf.c.

5. Applied PR 184, which avoids overflow issues with the heap limit
(introduced in 10.41/9).

6. Applied PR 192, which changes the timing units for pcre2test from
milliseconds to microseconds. This is more useful for modern CPUs.

7. Applied PR 193, which makes the requirement for C99 explicit in
configure.ac and CMakeLists.txt.

8. Fixed a bug in pcre2test when a ridiculously large string repeat required a
stupid amount of memory. It now gives a clean realloc() failure error.

9. Updates to restrict the interaction between ASCII and non-ASCII characters
for caseless matching and items like \d:

(a) Added PCRE2_EXTRA_CASELESS_RESTRICT to lock out mixing of ASCII and
non-ASCII when matching caselessly. This is also /r in pcre2test and
(?r) within patterns.

(b) Added PCRE2_EXTRA_ASCII_{BSD,BSS,BSW,POSIX} and corresponding (?aD) etc
in patterns and /a in pcre2test.

(c) Corresponding updates to pcre2test.

10. Unicode has been updated to 15.0.0.

11. The Python scripts and ucptest.c in maint have been updated (a) a minor
change needed for 9(a) above; (b) fix bugs in ucptest,

12. Integer overflow testing is now centralized in a new function.

13. Made PCRE2_UCP the default in UTF mode in pcre2grep, and added new options
--case-restrict and --no-ucp.

14. In the debugging printint module (which is normally only linked into
pcre2test), avoid the use of a variable called "not" because that's deprecated
in C and forbidden in C++. Also rewrite some code to avoid a goto into a block
that bypassed its initialization (though it didn't actually matter).

15. More minor code adjustments to avoid using reserved C++ words as variable
names ("new" and "typename") and another jump that bypassed an (irrelevant)
initialization.

16. Merged a pull request that removed pcre2_ucptables.c from the list of files
to compile in NON-AUTOTOOLS-BUILD because it is included in pcre2_tables.c.
Also adjusted the BUILD.bazel and build.zig files, which had the same issue. At
the same time, fixed a typo in the Bazel file.

17. Add PCRE2_EXTRA_ASCII_DIGIT to allow [:digit:] to be kept on sync with \d
even in UCP mode.

18. Fix an invalid match of ascii word classes when invalid utf is enabled.

19. Add a --posix-digit to pcre2grep for compatibility with GNU grep, and
other tools that prefer the POSIX compatible unicode definition for \d.

20. Report the bit width of the library in use by pcre2test for usability.

21. A pathological pattern conversion test could result in a string longer than
the available input buffer. Cause such a test to fail.

22. Add a check that forces a compiler error if PCRE2_CODE_UNIT_WIDTH is not 8,
16, or 32 when compiling any of the library modules.

23. Update pcre2_compile() to treat a NULL pattern with zero length as an empty
string.

24. Add support for limited-length variable-length lookbehind assertions, with
default maximum length 255 characters (same as Perl) but with a function to
adjust the limit.

25. Applied pull request 262, which updates the zig configuration, and 278
which fixes a bug with out-of-source-tree CMake build testing.

26. Add support for LoongArch to JIT.

27. Fixed a bug in pcre2_match() in the code for handling the vector of
backtracking frames on the heap, which caused a heap overflow if *LIMIT_HEAP
restricted an attempt to extend to less than the frame size. Generally tidy up
the code for extending the heap frames vector. This fixes GitHub issue 275.

28. Update pcre2_fuzzsupport.c to avoid clang sanitize complaint about shifting
left by 16 when there are non-zeros in the top 16 bits.

29. Perl 5.34.0 changed the meaning of (for example) {,3} which did not used to
be treated as a quantifier. Now it is interpreted as {0,3} and PCRE2 has
changed to match. Note that {,} is still not a quantifier.

30. Perl allows spaces and/or horizontal tabs after { or before } in all items
that use braces, and also before or after the comma in quantifiers. PCRE2 now
does the same, except for \u{...}, which is recognized only when
PCRE2_EXTRA_ALT_BSUX is set. This an ECMAScript, non-Perl compatible,
extension, so PCRE2 follows ECMAScript rather than Perl.

31. Applied pull request 300 by Carlo, which fixes 261. The bug was that
pcre2_match() was not fully resetting all captures that had been set within a
(possibly recursive) subroutine call such as (?3).

32. Changed the meaning of \w (and its synonyms) in UCP mode to match Perl. It
now matches characters whose general categories are L or N or whose particular
categories are Mn (non-spacing mark) or Pc (combining punctuation). The latter
includes underscore.

33. Changed the meaning of [:xdigit:] in UCP mode to match Perl. It now also
matches the "fullwidth" versions of the hex digits. Just like it is done for
[:digit:], PCRE2_EXTRA_ASCII_DIGIT can be used to keep this class ASCII only
without affecting other POSIX classes.

34. GitHub PR305 fixes a potential integer overflow in pcre2_dfa_match().

35. Updated handling of \b and \B in UCP mode to match the changes to \w in 32
above because \b and \B are defined in terms of \w.

36. Within a pattern (?aT) and (?-aT) set and reset the PCRE2_EXTRA_ASCII_DIGIT
option, and (?aP) also sets (?aT) so that (?-aP) disables all ASCII
restrictions on POSIX classes.

37. If PCRE2_FIRSTLINE was set on an anchored pattern, pcre2_match() and
pcre2_dfa_match() misbehaved. PCRE2_FIRSTLINE is now ignored for anchored
patterns.

38. Add a test for ridiculous ovector offset values to the substring extraction
functions.

39. Make OP_REVERSE use IMM2_SIZE for its data instead of LINK_SIZE, for
consistency with OP_VREVERSE.

40. In some legacy environments with a pre C99 snprintf, pcre2_regerror could
return an incorrect value when the provided buffer was too small.

41. Applied pull request 342 which adds sanity checks for ctype functions and
locks out any accidental sign-extension.

42. In the 32-bit library, in non-UTF mode, a quantifier that followed a
literal character with a value greater than or equal to 0x80000000u caused
undefined behaviour.

43. \z was misbehaving when matching fragments inside invalid UTF strings.

44. Implement --group-separator and --no-group-separator for pcre2grep.

45. Fix \X matching in 32 bit mode without UTF in JIT.

46. Fix backref iterators when PCRE2_MATCH_UNSET_BACKREF is set in JIT.

47. Refactor the handling of whole-pattern recursion (?0) in pcre2_match() so
that its end is handled similarly to other recursions. This has altered the
behaviour of /|(?0)./endanchored which was previously not right.

48. Improved the test for looping recursion by checking the last referenced
character as well as the current character. This allows some patterns that
previously triggered the check to run to completion instead of giving the loop
error.

49. In 32-bit mode, the compiler looped for the pattern /[\x{ffffffff}]/ when
PCRE2_CASELESS and PCRE2_UCP (but not PCRE2_UTF) were set. Fixed by not trying
to look for other cases for characters above the Unicode range.

50. In caseless 32-bit mode with UCP (but not UTF) set, the character
0xffffffff incorrectly matched any character that has more than one other case,
in particular k and s.

51. Fix accept and endanchored interaction in JIT.

52. Fix backreferences with unset backref and non-greedy iterators in JIT.

53. Improve the logic that checks for a list of starting code units -- positive
lookahead assertions are now ignored if the immediately following item is one
that sets a mandatory starting character. For example, /a?(?=bc|)d/ used to set
all of a, b, and d as possible starting code units; now it sets only a and d.

54. Fix incorrect class character matches in JIT.

55. In pcre2test, ensure pcre2_jit_match() is used when jitfast is used with
substitution testing.

56. Insert omitted setting of subject length in match data at the end of
pcre2_jit_match().

57. Implemented PCRE2_DISABLE_RECURSELOOP_CHECK for pcre2_match() to enable
some apparently looping recursions to run to completion and therefore match the
JIT behaviour. With this set, real loops will eventually get caught by match or
heap limits or run out of resource.

58. AC did a lot of work on pcre2_fuzzsupport.c to extend it to 16-bit and
32-bit libraries and to compare JIT and non-JIT matching.

10.42

------------------------------

1. Change 19 of 10.41 wasn't quite right; it put the definition of a default,
empty value for PCRE2_CALL_CONVENTION in src/pcre2posix.c instead of
src/pcre2posix.h, which meant that programs that included pcre2posix.h but not
pcre2.h failed to compile.

2. To catch similar issues to the above in future, a new small test program
that includes pcre2posix.h but not pcre2.h has been added to the test suite.

3. When the -S option of pcre2test was used to set a stack size greater than
the allowed maximum, the error message displayed the hard limit incorrectly.
This was pointed out on GitHub pull request 171, but the suggested patch
didn't cope with all cases. Some further modification was required.

4. Supplying an ovector count of more than 65535 to pcre2_match_data_create()
caused a crash because the field in the match data block is only 16 bits. A
maximum of 65535 is now silently applied.

5. Merged carenas patch 175 which fixes 86 - segfault on aarch64 (ARM),

6. The prototype for pcre2_substring_list_free() specified its argument as
PCRE2_SPTR * which is a const data type, whereas the yield from
pcre2_substring_list() is not const. This caused compiler warnings. I have
changed the argument of pcre2_substring_list_free() to be PCRE2_UCHAR ** to
remove this anomaly. This might cause new warnings in existing code where a
cast has been used to avoid previous ones.

10.41

------------------------------

1. Add fflush() before and after a fork callout in pcre2grep to get its output
to be the same on all systems. (There were previously ordering differences in
Alpine Linux).

2. Merged patch from carenas (GitHub 110) for pthreads support in CMake.

3. SSF scorecards grumbled about possible overflow in an expression in
pcre2test. It never would have overflowed in practice, but some casts have been
added and at the some time there's been some tidying of fprints that output
size_t values.

4. PR 94 showed up an unused enum in pcre2_convert.c, which is now removed.

5. Minor code re-arrangement to remove gcc warning about realloc() in
pcre2test.

6. Change a number of int variables that hold buffer and line lengths in
pcre2grep to PCRE2_SIZE (aka size_t).

7. Added an ifdef to cut out a call to PRIV(jit_free) when JIT is not
supported (even though that function would do nothing in that case) at the
request of a user who doesn't even want to link with pcre_jit_compile.o. Also
tidied up an untidy ifdef arrangement in pcre2test.

8. Fixed an issue in the backtracking optimization of character repeats in
JIT. Furthermore optimize star repetitions, not just plus repetitions.

9. Removed the use of an initial backtracking frames vector on the system stack
in pcre2_match() so that it now always uses the heap. (In a multi-thread
environment with very small stacks there had been an issue.) This also is
tidier for JIT matching, which didn't need that vector. The heap vector is now
remembered in the match data block and re-used if that block itself is re-used.
It is freed with the match data block.

10. Adjusted the find_limits code in pcre2test to work with change 9 above.

11. Added find_limits_noheap to pcre2test, because the heap limits are now
different in different environments and so cannot be included in the standard
tests.

12. Created a test for pcre2_match() heap processing that is not part of the
tests run by 'make check', but can be run manually. The current output is from
a 64-bit system.

13. Implemented -Z aka --null in pcre2grep.

14. A minor change to pcre2test and the addition of several new pcre2grep tests
have improved LCOV coverage statistics. At the same time, code in pcre2grep and
elsewhere that can never be obeyed in normal testing has been excluded from
coverage.

15. Fixed a bug in pcre2grep that could cause an extra newline to be written
after output generated by --output.

16. If a file has a .bz2 extension but is not in fact compressed, pcre2grep
should process it as a plain text file. A bug stopped this happening; now fixed
and added to the tests.

17. When pcre2grep was running not in UTF mode, if a string specified by
--output or obtained from a callout in a pattern contained a character (byte)
greater than 127, it was incorrectly output in UTF-8 format.

18. Added some casts after warnings from Clang sanitize.

19. Merged patch from cbouc (GitHub 139): 4 function prototypes were missing
PCRE2_CALL_CONVENTION in src/pcre2posix.h. All function prototypes returning
pointers had out of place PCRE2_CALL_CONVENTION in src/pcre2.h.*. These
produced errors when building for Windows with define PCRE2_CALL_CONVENTION
__stdcall.

20. A negative repeat value in a pcre2test subject line was not being
diagnosed, leading to infinite looping.

21. Updated RunGrepTest to discard the warning that Bash now gives when setting
LC_CTYPE to a bad value (because older versions didn't).

22. Updated pcre2grep so that it behaves like GNU grep when matching more than
one pattern and a later pattern matches at an earlier point in the subject when
the matched substrings are being identified by colour or by offsets.

23. Updated the PrepareRelease script so that the man page that it makes for
the pcre2demo demonstration program is more standard and does not cause errors
when processed by lexgrog or mandb -c (GitHub issue 160).

24. The JIT compiler was updated.

10.40

---------------------------

1. Merged patch from carenas (GitHub 35, 7db87842) to fix pcre2grep incorrect
handling of multiple passes.

2. Merged patch from carenas (GitHub 36, dae47509) to fix portability issue
in pcre2grep with buffered fseek(stdin).

3. Merged patch from carenas (GitHub 37, acc520924) to fix tests when -S is
not supported.

4. Revert an unintended change in JIT repeat detection.

5. Merged patch from carenas (GitHub 52, b037bfa1) to fix build on GNU Hurd.

6. Merged documentation and comments patches from carenas (GitHub 47).

7. Merged patch from carenas (GitHub 49) to remove obsolete JFriedl test code
from pcre2grep.

8. Merged patch from carenas (GitHub 48) to fix CMake install issue 46.

9. Merged patch from carenas (GitHub 53) fixing NULL checks in matching and
substituting.

10. Add null_subject and null_replacement modifiers to pcre2test.

11. Add check for NULL subject to POSIX regexec() function.

12. Add check for NULL replacement to pcre2_substitute().

13. For the subject arguments of pcre2_match(), pcre2_dfa_match(), and
pcre2_substitute(), and the replacement argument of the latter, if the pointer
is NULL and the length is zero, treat as an empty string. Apparently a number
of applications treat NULL/0 in this way.

14. Added support for Bidi_Class and a number of binary Unicode properties,
including Bidi_Control.

15. Fix some minor issues raised by clang sanitize.

16. Very minor code speed up for maximizing character property matches.

17. A number of changes to script matching for \p and \P:

(a) Script extensions for a character are now coded as a bitmap instead of
a list of script numbers, which should be faster and does not need a
loop.

(b) Added the syntax \p{script:xxx} and \p{script_extensions:xxx} (synonyms
sc and scx).

(c) Changed \p{scriptname} from being the same as \p{sc:scriptname} to being
the same as \p{scx:scriptname} because this change happened in Perl at
release 5.26.

(d) The standard Unicode 4-letter abbreviations for script names are now
recognized.

(e) In accordance with Unicode and Perl's "loose matching" rules, spaces,
hyphens, and underscores are ignored in property names, which are then
matched independent of case.

18. The Python scripts in the maint directory have been refactored. There are
now three scripts that generate pcre2_ucd.c, pcre2_ucp.h, and pcre2_ucptables.c
(which is included by pcre2_tables.c). The data lists that used to be
duplicated are now held in a single common Python module.

19. On CHERI, and thus Arm's Morello prototype, pointers are represented as
hardware capabilities, which consist of both an integer address and additional
metadata, meaning they are twice the size of the platform's size_t type, i.e.
16 bytes on a 64-bit system. The ovector member of heapframe happens to only be
8 byte aligned, and so computing frame_size ended up with a multiple of 8 but
not 16. Whilst the first frame was always suitably aligned, this then
misaligned the frame that follows, resulting in an alignment fault when storing
a pointer to Fecode at the start of match. Patch to fix this issue by Jessica
Clarke PR72.

20. Added -LP and -LS listing options to pcre2test.

21. A user discovered that the library names in CMakeLists.txt for MSVC
debugger (PDB) files were incorrect - perhaps never tried for PCRE2?

22. An item such as [Aa] is optimized into a caseless single character match.
When this was quantified (e.g. [Aa]{2}) and was also the last literal item in a
pattern, the optimizing "must be present for a match" character check was not
being flagged as caseless, causing some matches that should have succeeded to
fail.

23. Fixed a unicode property matching issue in JIT. The character was not
fully read in caseless matching.

24. Fixed an issue affecting recursions in JIT caused by duplicated data
transfers.

25. Merged patch from carenas (GitHub 96) which fixes some problems with
pcre2test and readline/readedit:

* Use the right header for libedit in FreeBSD with autoconf
* Really allow libedit with cmake
* Avoid using readline headers with libedit

Page 1 of 4

© 2025 Safety CLI Cybersecurity Inc. All Rights Reserved.