httpd-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
Subject svn commit: r598343 [1/22] - in /httpd/httpd/vendor/pcre/current: ./ doc/ doc/html/ testdata/
Date Mon, 26 Nov 2007 17:04:37 GMT
Author: pgollucci
Date: Mon Nov 26 09:04:19 2007
New Revision: 598343

revert r598339 the pcre7.4 upgrade which I didn't mean to commit.
Approved by: jerenkrantz

      - copied unchanged from r598338, httpd/httpd/vendor/pcre/current/
      - copied unchanged from r598338, httpd/httpd/vendor/pcre/current/
      - copied unchanged from r598338, httpd/httpd/vendor/pcre/current/
      - copied unchanged from r598338, httpd/httpd/vendor/pcre/current/
      - copied unchanged from r598338, httpd/httpd/vendor/pcre/current/doc/Tech.Notes
      - copied unchanged from r598338, httpd/httpd/vendor/pcre/current/doc/pcre.html
      - copied unchanged from r598338, httpd/httpd/vendor/pcre/current/doc/pcregrep.html
      - copied unchanged from r598338, httpd/httpd/vendor/pcre/current/doc/pcreposix.html
      - copied unchanged from r598338, httpd/httpd/vendor/pcre/current/doc/pcreposix.txt
      - copied unchanged from r598338, httpd/httpd/vendor/pcre/current/doc/pcretest.html
      - copied unchanged from r598338, httpd/httpd/vendor/pcre/current/get.c
      - copied unchanged from r598338, httpd/httpd/vendor/pcre/current/internal.h
      - copied unchanged from r598338, httpd/httpd/vendor/pcre/current/libpcre.def
      - copied unchanged from r598338, httpd/httpd/vendor/pcre/current/libpcreposix.def
      - copied unchanged from r598338, httpd/httpd/vendor/pcre/current/maketables.c
      - copied unchanged from r598338, httpd/httpd/vendor/pcre/current/mkinstalldirs
      - copied unchanged from r598338, httpd/httpd/vendor/pcre/current/pcre.c
      - copied unchanged from r598338, httpd/httpd/vendor/pcre/current/pcre.def
      - copied unchanged from r598338, httpd/httpd/vendor/pcre/current/
      - copied unchanged from r598338, httpd/httpd/vendor/pcre/current/perltest
      - copied unchanged from r598338, httpd/httpd/vendor/pcre/current/perltest8
      - copied unchanged from r598338, httpd/httpd/vendor/pcre/current/printint.c
      - copied unchanged from r598338, httpd/httpd/vendor/pcre/current/study.c
      - copied unchanged from r598338, httpd/httpd/vendor/pcre/current/ucp.c
      - copied unchanged from r598338, httpd/httpd/vendor/pcre/current/ucptable.c
      - copied unchanged from r598338, httpd/httpd/vendor/pcre/current/ucptypetable.c

Modified: httpd/httpd/vendor/pcre/current/AUTHORS
--- httpd/httpd/vendor/pcre/current/AUTHORS (original)
+++ httpd/httpd/vendor/pcre/current/AUTHORS Mon Nov 26 09:04:19 2007
@@ -1,23 +1,6 @@
-Written by:       Philip Hazel
-Email local part: ph10
-Email domain:
+Written by: Philip Hazel <>
 University of Cambridge Computing Service,
-Cambridge, England.
-Copyright (c) 1997-2007 University of Cambridge
-All rights reserved
-Written by:       Google Inc.
-Copyright (c) 2007 Google Inc
-All rights reserved
+Cambridge, England. Phone: +44 1223 334714.
+Copyright (c) 1997-2004 University of Cambridge

Modified: httpd/httpd/vendor/pcre/current/COPYING
--- httpd/httpd/vendor/pcre/current/COPYING (original)
+++ httpd/httpd/vendor/pcre/current/COPYING Mon Nov 26 09:04:19 2007
@@ -1,5 +1,45 @@
-Please see the file LICENCE in the PCRE distribution for licensing details.
+PCRE is a library of functions to support regular expressions whose syntax
+and semantics are as close as possible to those of the Perl 5 language.
+Release 5 of PCRE is distributed under the terms of the "BSD" licence, as
+specified below. The documentation for PCRE, supplied in the "doc"
+directory, is distributed under the same terms as the software itself.
+Written by: Philip Hazel <>
+University of Cambridge Computing Service,
+Cambridge, England. Phone: +44 1223 334714.
+Copyright (c) 1997-2004 University of Cambridge
+All rights reserved.
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of the University of Cambridge nor the names of its
+      contributors may be used to endorse or promote products derived from
+      this software without specific prior written permission.

Modified: httpd/httpd/vendor/pcre/current/ChangeLog
--- httpd/httpd/vendor/pcre/current/ChangeLog (original)
+++ httpd/httpd/vendor/pcre/current/ChangeLog Mon Nov 26 09:04:19 2007
@@ -1,1410 +1,6 @@
 ChangeLog for PCRE
-Version 7.4 21-Sep-07
-1.  Change 7.3/28 was implemented for classes by looking at the bitmap. This
-    means that a class such as [\s] counted as "explicit reference to CR or
-    LF". That isn't really right - the whole point of the change was to try to
-    help when there was an actual mention of one of the two characters. So now
-    the change happens only if \r or \n (or a literal CR or LF) character is
-    encountered.
-2.  The 32-bit options word was also used for 6 internal flags, but the numbers
-    of both had grown to the point where there were only 3 bits left.
-    Fortunately, there was spare space in the data structure, and so I have
-    moved the internal flags into a new 16-bit field to free up more option
-    bits.
-3.  The appearance of (?J) at the start of a pattern set the DUPNAMES option,
-    but did not set the internal JCHANGED flag - either of these is enough to
-    control the way the "get" function works - but the PCRE_INFO_JCHANGED
-    facility is supposed to tell if (?J) was ever used, so now (?J) at the
-    start sets both bits.
-4.  Added options (at build time, compile time, exec time) to change \R from
-    matching any Unicode line ending sequence to just matching CR, LF, or CRLF.
-5.  doc/pcresyntax.html was missing from the distribution.
-6.  Put back the definition of PCRE_ERROR_NULLWSLIMIT, for backward
-    compatibility, even though it is no longer used.
-7.  Added macro for snprintf to and also for strtoll and
-    strtoull to to select the available functions in WIN32 when the
-    windows.h file is present (where different names are used). [This was
-    reversed later after testing - see 16 below.]
-8.  Changed all #include <config.h> to #include "config.h". There were also
-    some further <pcre.h> cases that I changed to "pcre.h".
-9.  When pcregrep was used with the --colour option, it missed the line ending
-    sequence off the lines that it output.
-10. It was pointed out to me that arrays of string pointers cause lots of
-    relocations when a shared library is dynamically loaded. A technique of
-    using a single long string with a table of offsets can drastically reduce
-    these. I have refactored PCRE in four places to do this. The result is
-    dramatic:
-      Originally:                          290
-      After changing UCP table:            187
-      After changing error message table:   43
-      After changing table of "verbs"       36
-      After changing table of Posix names   22
-    Thanks to the folks working on Gregex for glib for this insight.
-11. --disable-stack-for-recursion caused compiling to fail unless -enable-
-    unicode-properties was also set.
-12. Updated the tests so that they work when \R is defaulted to ANYCRLF.
-13. Added checks for ANY and ANYCRLF to where it previously
-    checked only for CRLF.
-14. Added casts to pcretest.c to avoid compiler warnings.
-15. Added Craig's patch to various pcrecpp modules to avoid compiler warnings.
-16. Added Craig's patch to remove the WINDOWS_H tests, that were not working,
-    and instead check for _strtoi64 explicitly, and avoid the use of snprintf()
-    entirely. This removes changes made in 7 above.
-17. The CMake files have been updated, and there is now more information about
-    building with CMake in the NON-UNIX-USE document.
-Version 7.3 28-Aug-07
- 1. In the rejigging of the build system that eventually resulted in 7.1, the
-    line "#include <pcre.h>" was included in pcre_internal.h. The use of angle
-    brackets there is not right, since it causes compilers to look for an
-    installed pcre.h, not the version that is in the source that is being
-    compiled (which of course may be different). I have changed it back to:
-      #include "pcre.h"
-    I have a vague recollection that the change was concerned with compiling in
-    different directories, but in the new build system, that is taken care of
-    by the VPATH setting the Makefile.
- 2. The pattern .*$ when run in not-DOTALL UTF-8 mode with newline=any failed
-    when the subject happened to end in the byte 0x85 (e.g. if the last
-    character was \x{1ec5}). *Character* 0x85 is one of the "any" newline
-    characters but of course it shouldn't be taken as a newline when it is part
-    of another character. The bug was that, for an unlimited repeat of . in
-    not-DOTALL UTF-8 mode, PCRE was advancing by bytes rather than by
-    characters when looking for a newline.
- 3. A small performance improvement in the DOTALL UTF-8 mode .* case.
- 4. Debugging: adjusted the names of opcodes for different kinds of parentheses
-    in debug output.
- 5. Arrange to use "%I64d" instead of "%lld" and "%I64u" instead of "%llu" for
-    long printing in the pcrecpp unittest when running under MinGW.
- 6. ESC_K was left out of the EBCDIC table.
- 7. Change 7.0/38 introduced a new limit on the number of nested non-capturing
-    parentheses; I made it 1000, which seemed large enough. Unfortunately, the
-    limit also applies to "virtual nesting" when a pattern is recursive, and in
-    this case 1000 isn't so big. I have been able to remove this limit at the
-    expense of backing off one optimization in certain circumstances. Normally,
-    when pcre_exec() would call its internal match() function recursively and
-    immediately return the result unconditionally, it uses a "tail recursion"
-    feature to save stack. However, when a subpattern that can match an empty
-    string has an unlimited repetition quantifier, it no longer makes this
-    optimization. That gives it a stack frame in which to save the data for
-    checking that an empty string has been matched. Previously this was taken
-    from the 1000-entry workspace that had been reserved. So now there is no
-    explicit limit, but more stack is used.
- 8. Applied Daniel's patches to solve problems with the import/export magic
-    syntax that is required for Windows, and which was going wrong for the
-    pcreposix and pcrecpp parts of the library. These were overlooked when this
-    problem was solved for the main library.
- 9. There were some crude static tests to avoid integer overflow when computing
-    the size of patterns that contain repeated groups with explicit upper
-    limits. As the maximum quantifier is 65535, the maximum group length was
-    set at 30,000 so that the product of these two numbers did not overflow a
-    32-bit integer. However, it turns out that people want to use groups that
-    are longer than 30,000 bytes (though not repeat them that many times).
-    Change 7.0/17 (the refactoring of the way the pattern size is computed) has
-    made it possible to implement the integer overflow checks in a much more
-    dynamic way, which I have now done. The artificial limitation on group
-    length has been removed - we now have only the limit on the total length of
-    the compiled pattern, which depends on the LINK_SIZE setting.
-10. Fixed a bug in the documentation for get/copy named substring when
-    duplicate names are permitted. If none of the named substrings are set, the
-    functions return PCRE_ERROR_NOSUBSTRING (7); the doc said they returned an
-    empty string.
-11. Because Perl interprets \Q...\E at a high level, and ignores orphan \E
-    instances, patterns such as [\Q\E] or [\E] or even [^\E] cause an error,
-    because the ] is interpreted as the first data character and the
-    terminating ] is not found. PCRE has been made compatible with Perl in this
-    regard. Previously, it interpreted [\Q\E] as an empty class, and [\E] could
-    cause memory overwriting.
-10. Like Perl, PCRE automatically breaks an unlimited repeat after an empty
-    string has been matched (to stop an infinite loop). It was not recognizing
-    a conditional subpattern that could match an empty string if that
-    subpattern was within another subpattern. For example, it looped when
-    trying to match  (((?(1)X|))*)  but it was OK with  ((?(1)X|)*)  where the
-    condition was not nested. This bug has been fixed.
-12. A pattern like \X?\d or \P{L}?\d in non-UTF-8 mode could cause a backtrack
-    past the start of the subject in the presence of bytes with the top bit
-    set, for example "\x8aBCD".
-13. Added Perl 5.10 experimental backtracking controls (*FAIL), (*F), (*PRUNE),
-    (*SKIP), (*THEN), (*COMMIT), and (*ACCEPT).
-14. Optimized (?!) to (*FAIL).
-15. Updated the test for a valid UTF-8 string to conform to the later RFC 3629.
-    This restricts code points to be within the range 0 to 0x10FFFF, excluding
-    the "low surrogate" sequence 0xD800 to 0xDFFF. Previously, PCRE allowed the
-    full range 0 to 0x7FFFFFFF, as defined by RFC 2279. Internally, it still
-    does: it's just the validity check that is more restrictive.
-16. Inserted checks for integer overflows during escape sequence (backslash)
-    processing, and also fixed erroneous offset values for syntax errors during
-    backslash processing.
-17. Fixed another case of looking too far back in non-UTF-8 mode (cf 12 above)
-    for patterns like [\PPP\x8a]{1,}\x80 with the subject "A\x80".
-18. An unterminated class in a pattern like (?1)\c[ with a "forward reference"
-    caused an overrun.
-19. A pattern like (?:[\PPa*]*){8,} which had an "extended class" (one with
-    something other than just ASCII characters) inside a group that had an
-    unlimited repeat caused a loop at compile time (while checking to see
-    whether the group could match an empty string).
-20. Debugging a pattern containing \p or \P could cause a crash. For example,
-    [\P{Any}] did so. (Error in the code for printing property names.)
-21. An orphan \E inside a character class could cause a crash.
-22. A repeated capturing bracket such as (A)? could cause a wild memory
-    reference during compilation.
-23. There are several functions in pcre_compile() that scan along a compiled
-    expression for various reasons (e.g. to see if it's fixed length for look
-    behind). There were bugs in these functions when a repeated \p or \P was
-    present in the pattern. These operators have additional parameters compared
-    with \d, etc, and these were not being taken into account when moving along
-    the compiled data. Specifically:
-    (a) A item such as \p{Yi}{3} in a lookbehind was not treated as fixed
-        length.
-    (b) An item such as \pL+ within a repeated group could cause crashes or
-        loops.
-    (c) A pattern such as \p{Yi}+(\P{Yi}+)(?1) could give an incorrect
-        "reference to non-existent subpattern" error.
-    (d) A pattern like (\P{Yi}{2}\277)? could loop at compile time.
-24. A repeated \S or \W in UTF-8 mode could give wrong answers when multibyte
-    characters were involved (for example /\S{2}/8g with "A\x{a3}BC").
-25. Using pcregrep in multiline, inverted mode (-Mv) caused it to loop.
-26. Patterns such as [\P{Yi}A] which include \p or \P and just one other
-    character were causing crashes (broken optimization).
-27. Patterns such as (\P{Yi}*\277)* (group with possible zero repeat containing
-    \p or \P) caused a compile-time loop.
-28. More problems have arisen in unanchored patterns when CRLF is a valid line
-    break. For example, the unstudied pattern [\r\n]A does not match the string
-    "\r\nA" because change 7.0/46 below moves the current point on by two
-    characters after failing to match at the start. However, the pattern \nA
-    *does* match, because it doesn't start till \n, and if [\r\n]A is studied,
-    the same is true. There doesn't seem any very clean way out of this, but
-    what I have chosen to do makes the common cases work: PCRE now takes note
-    of whether there can be an explicit match for \r or \n anywhere in the
-    pattern, and if so, 7.0/46 no longer applies. As part of this change,
-    there's a new PCRE_INFO_HASCRORLF option for finding out whether a compiled
-    pattern has explicit CR or LF references.
-29. Added (*CR) etc for changing newline setting at start of pattern.
-Version 7.2 19-Jun-07
- 1. If the fr_FR locale cannot be found for test 3, try the "french" locale,
-    which is apparently normally available under Windows.
- 2. Re-jig the pcregrep tests with different newline settings in an attempt
-    to make them independent of the local environment's newline setting.
- 3. Add code to to remove -g from the CFLAGS default settings.
- 4. Some of the "internals" tests were previously cut out when the link size
-    was not 2, because the output contained actual offsets. The recent new
-    "Z" feature of pcretest means that these can be cut out, making the tests
-    usable with all link sizes.
- 5. Implemented Stan Switzer's goto replacement for longjmp() when not using
-    stack recursion. This gives a massive performance boost under BSD, but just
-    a small improvement under Linux. However, it saves one field in the frame
-    in all cases.
- 6. Added more features from the forthcoming Perl 5.10:
-    (a) (?-n) (where n is a string of digits) is a relative subroutine or
-        recursion call. It refers to the nth most recently opened parentheses.
-    (b) (?+n) is also a relative subroutine call; it refers to the nth next
-        to be opened parentheses.
-    (c) Conditions that refer to capturing parentheses can be specified
-        relatively, for example, (?(-2)... or (?(+3)...
-    (d) \K resets the start of the current match so that everything before
-        is not part of it.
-    (e) \k{name} is synonymous with \k<name> and \k'name' (.NET compatible).
-    (f) \g{name} is another synonym - part of Perl 5.10's unification of
-        reference syntax.
-    (g) (?| introduces a group in which the numbering of parentheses in each
-        alternative starts with the same number.
-    (h) \h, \H, \v, and \V match horizontal and vertical whitespace.
- 7. Added two new calls to pcre_fullinfo(): PCRE_INFO_OKPARTIAL and
- 8. A pattern such as  (.*(.)?)*  caused pcre_exec() to fail by either not
-    terminating or by crashing. Diagnosed by Viktor Griph; it was in the code
-    for detecting groups that can match an empty string.
- 9. A pattern with a very large number of alternatives (more than several
-    hundred) was running out of internal workspace during the pre-compile
-    phase, where pcre_compile() figures out how much memory will be needed. A
-    bit of new cunning has reduced the workspace needed for groups with
-    alternatives. The 1000-alternative test pattern now uses 12 bytes of
-    workspace instead of running out of the 4096 that are available.
-10. Inserted some missing (unsigned int) casts to get rid of compiler warnings.
-11. Applied patch from Google to remove an optimization that didn't quite work.
-    The report of the bug said:
-      pcrecpp::RE("a*").FullMatch("aaa") matches, while
-      pcrecpp::RE("a*?").FullMatch("aaa") does not, and
-      pcrecpp::RE("a*?\\z").FullMatch("aaa") does again.
-12. If \p or \P was used in non-UTF-8 mode on a character greater than 127
-    it matched the wrong number of bytes.
-Version 7.1 24-Apr-07
- 1. Applied Bob Rossi and Daniel G's patches to convert the build system to one
-    that is more "standard", making use of automake and other Autotools. There
-    is some re-arrangement of the files and adjustment of comments consequent
-    on this.
- 2. Part of the patch fixed a problem with the pcregrep tests. The test of -r
-    for recursive directory scanning broke on some systems because the files
-    are not scanned in any specific order and on different systems the order
-    was different. A call to "sort" has been inserted into RunGrepTest for the
-    approprate test as a short-term fix. In the longer term there may be an
-    alternative.
- 3. I had an email from Eric Raymond about problems translating some of PCRE's
-    man pages to HTML (despite the fact that I distribute HTML pages, some
-    people do their own conversions for various reasons). The problems
-    concerned the use of low-level troff macros .br and .in. I have therefore
-    removed all such uses from the man pages (some were redundant, some could
-    be replaced by .nf/.fi pairs). The 132html script that I use to generate
-    HTML has been updated to handle .nf/.fi and to complain if it encounters
-    .br or .in.
- 4. Updated comments in that get placed in and also
-    arranged for config.h to be included in the distribution, with the name
-    config.h.generic, for the benefit of those who have to compile without
-    Autotools (compare pcre.h, which is now distributed as pcre.h.generic).
- 5. Updated the support (such as it is) for Virtual Pascal, thanks to Stefan
-    Weber: (1) pcre_internal.h was missing some function renames; (2) updated
-    makevp.bat for the current PCRE, using the additional files
-    makevp_c.txt, makevp_l.txt, and pcregexp.pas.
- 6. A Windows user reported a minor discrepancy with test 2, which turned out
-    to be caused by a trailing space on an input line that had got lost in his
-    copy. The trailing space was an accident, so I've just removed it.
- 7. Add -Wl,-R... flags in for *BSD* systems, as I'm told
-    that is needed.
- 8. Mark ucp_table (in ucptable.h) and ucp_gentype (in pcre_ucp_searchfuncs.c)
-    as "const" (a) because they are and (b) because it helps the PHP
-    maintainers who have recently made a script to detect big data structures
-    in the php code that should be moved to the .rodata section. I remembered
-    to update Builducptable as well, so it won't revert if ucptable.h is ever
-    re-created.
- 9. Added some extra #ifdef SUPPORT_UTF8 conditionals into pcretest.c,
-    pcre_printint.src, pcre_compile.c, pcre_study.c, and pcre_tables.c, in
-    order to be able to cut out the UTF-8 tables in the latter when UTF-8
-    support is not required. This saves 1.5-2K of code, which is important in
-    some applications.
-    Later: more #ifdefs are needed in pcre_ord2utf8.c and pcre_valid_utf8.c
-    so as not to refer to the tables, even though these functions will never be
-    called when UTF-8 support is disabled. Otherwise there are problems with a
-    shared library.
-10. Fixed two bugs in the emulated memmove() function in pcre_internal.h:
-    (a) It was defining its arguments as char * instead of void *.
-    (b) It was assuming that all moves were upwards in memory; this was true
-        a long time ago when I wrote it, but is no longer the case.
-    The emulated memove() is provided for those environments that have neither
-    memmove() nor bcopy(). I didn't think anyone used it these days, but that
-    is clearly not the case, as these two bugs were recently reported.
-11. The script PrepareRelease is now distributed: it calls 132html, CleanTxt,
-    and Detrail to create the HTML documentation, the .txt form of the man
-    pages, and it removes trailing spaces from listed files. It also creates
-    pcre.h.generic and config.h.generic from pcre.h and config.h. In the latter
-    case, it wraps all the #defines with #ifndefs. This script should be run
-    before "make dist".
-12. Fixed two fairly obscure bugs concerned with quantified caseless matching
-    with Unicode property support.
-    (a) For a maximizing quantifier, if the two different cases of the
-        character were of different lengths in their UTF-8 codings (there are
-        some cases like this - I found 11), and the matching function had to
-        back up over a mixture of the two cases, it incorrectly assumed they
-        were both the same length.
-    (b) When PCRE was configured to use the heap rather than the stack for
-        recursion during matching, it was not correctly preserving the data for
-        the other case of a UTF-8 character when checking ahead for a match
-        while processing a minimizing repeat. If the check also involved
-        matching a wide character, but failed, corruption could cause an
-        erroneous result when trying to check for a repeat of the original
-        character.
-13. Some tidying changes to the testing mechanism:
-    (a) The RunTest script now detects the internal link size and whether there
-        is UTF-8 and UCP support by running ./pcretest -C instead of relying on
-        values substituted by "configure". (The RunGrepTest script already did
-        this for UTF-8.) The script no longer substitutes the
-        relevant variables.
-    (b) The debugging options /B and /D in pcretest show the compiled bytecode
-        with length and offset values. This means that the output is different
-        for different internal link sizes. Test 2 is skipped for link sizes
-        other than 2 because of this, bypassing the problem. Unfortunately,
-        there was also a test in test 3 (the locale tests) that used /B and
-        failed for link sizes other than 2. Rather than cut the whole test out,
-        I have added a new /Z option to pcretest that replaces the length and
-        offset values with spaces. This is now used to make test 3 independent
-        of link size. (Test 2 will be tidied up later.)
-14. If erroroffset was passed as NULL to pcre_compile, it provoked a
-    segmentation fault instead of returning the appropriate error message.
-15. In multiline mode when the newline sequence was set to "any", the pattern
-    ^$ would give a match between the \r and \n of a subject such as "A\r\nB".
-    This doesn't seem right; it now treats the CRLF combination as the line
-    ending, and so does not match in that case. It's only a pattern such as ^$
-    that would hit this one: something like ^ABC$ would have failed after \r
-    and then tried again after \r\n.
-16. Changed the comparison command for RunGrepTest from "diff -u" to "diff -ub"
-    in an attempt to make files that differ only in their line terminators
-    compare equal. This works on Linux.
-17. Under certain error circumstances pcregrep might try to free random memory
-    as it exited. This is now fixed, thanks to valgrind.
-19. In pcretest, if the pattern /(?m)^$/g<any> was matched against the string
-    "abc\r\n\r\n", it found an unwanted second match after the second \r. This
-    was because its rules for how to advance for /g after matching an empty
-    string at the end of a line did not allow for this case. They now check for
-    it specially.
-20. pcretest is supposed to handle patterns and data of any length, by
-    extending its buffers when necessary. It was getting this wrong when the
-    buffer for a data line had to be extended.
-21. Added PCRE_NEWLINE_ANYCRLF which is like ANY, but matches only CR, LF, or
-    CRLF as a newline sequence.
-22. Code for handling Unicode properties in pcre_dfa_exec() wasn't being cut
-    out by #ifdef SUPPORT_UCP. This did no harm, as it could never be used, but
-    I have nevertheless tidied it up.
-23. Added some casts to kill warnings from HP-UX ia64 compiler.
-24. Added a man page for pcre-config.
-Version 7.0 19-Dec-06
- 1. Fixed a signed/unsigned compiler warning in pcre_compile.c, shown up by
-    moving to gcc 4.1.1.
- 2. The -S option for pcretest uses setrlimit(); I had omitted to #include
-    sys/time.h, which is documented as needed for this function. It doesn't
-    seem to matter on Linux, but it showed up on some releases of OS X.
- 3. It seems that there are systems where bytes whose values are greater than
-    127 match isprint() in the "C" locale. The "C" locale should be the
-    default when a C program starts up. In most systems, only ASCII printing
-    characters match isprint(). This difference caused the output from pcretest
-    to vary, making some of the tests fail. I have changed pcretest so that:
-    (a) When it is outputting text in the compiled version of a pattern, bytes
-        other than 32-126 are always shown as hex escapes.
-    (b) When it is outputting text that is a matched part of a subject string,
-        it does the same, unless a different locale has been set for the match
-        (using the /L modifier). In this case, it uses isprint() to decide.
- 4. Fixed a major bug that caused incorrect computation of the amount of memory
-    required for a compiled pattern when options that changed within the
-    pattern affected the logic of the preliminary scan that determines the
-    length. The relevant options are -x, and -i in UTF-8 mode. The result was
-    that the computed length was too small. The symptoms of this bug were
-    either the PCRE error "internal error: code overflow" from pcre_compile(),
-    or a glibc crash with a message such as "pcretest: free(): invalid next
-    size (fast)". Examples of patterns that provoked this bug (shown in
-    pcretest format) are:
-      /(?-x: )/x
-      /(?x)(?-x: \s*#\s*)/
-      /((?i)[\x{c0}])/8
-      /(?i:[\x{c0}])/8
-    HOWEVER: Change 17 below makes this fix obsolete as the memory computation
-    is now done differently.
- 5. Applied patches from Google to: (a) add a QuoteMeta function to the C++
-    wrapper classes; (b) implement a new function in the C++ scanner that is
-    more efficient than the old way of doing things because it avoids levels of
-    recursion in the regex matching; (c) add a paragraph to the documentation
-    for the FullMatch() function.
- 6. The escape sequence \n was being treated as whatever was defined as
-    "newline". Not only was this contrary to the documentation, which states
-    that \n is character 10 (hex 0A), but it also went horribly wrong when
-    "newline" was defined as CRLF. This has been fixed.
- 7. In pcre_dfa_exec.c the value of an unsigned integer (the variable called c)
-    was being set to -1 for the "end of line" case (supposedly a value that no
-    character can have). Though this value is never used (the check for end of
-    line is "zero bytes in current character"), it caused compiler complaints.
-    I've changed it to 0xffffffff.
- 8. In pcre_version.c, the version string was being built by a sequence of
-    C macros that, in the event of PCRE_PRERELEASE being defined as an empty
-    string (as it is for production releases) called a macro with an empty
-    argument. The C standard says the result of this is undefined. The gcc
-    compiler treats it as an empty string (which was what was wanted) but it is
-    reported that Visual C gives an error. The source has been hacked around to
-    avoid this problem.
- 9. On the advice of a Windows user, included <io.h> and <fcntl.h> in Windows
-    builds of pcretest, and changed the call to _setmode() to use _O_BINARY
-    instead of 0x8000. Made all the #ifdefs test both _WIN32 and WIN32 (not all
-    of them did).
-10. Originally, pcretest opened its input and output without "b"; then I was
-    told that "b" was needed in some environments, so it was added for release
-    5.0 to both the input and output. (It makes no difference on Unix-like
-    systems.) Later I was told that it is wrong for the input on Windows. I've
-    now abstracted the modes into two macros, to make it easier to fiddle with
-    them, and removed "b" from the input mode under Windows.
-11. Added pkgconfig support for the C++ wrapper library, libpcrecpp.
-12. Added -help and --help to pcretest as an official way of being reminded
-    of the options.
-13. Removed some redundant semicolons after macro calls in
-    and because they annoy compilers at high warning levels.
-14. A bit of tidying/refactoring in pcre_exec.c in the main bumpalong loop.
-15. Fixed an occurrence of == in that should have been = (shell
-    scripts are not C programs :-) and which was not noticed because it works
-    on Linux.
-16. pcretest is supposed to handle any length of pattern and data line (as one
-    line or as a continued sequence of lines) by extending its input buffer if
-    necessary. This feature was broken for very long pattern lines, leading to
-    a string of junk being passed to pcre_compile() if the pattern was longer
-    than about 50K.
-17. I have done a major re-factoring of the way pcre_compile() computes the
-    amount of memory needed for a compiled pattern. Previously, there was code
-    that made a preliminary scan of the pattern in order to do this. That was
-    OK when PCRE was new, but as the facilities have expanded, it has become
-    harder and harder to keep it in step with the real compile phase, and there
-    have been a number of bugs (see for example, 4 above). I have now found a
-    cunning way of running the real compile function in a "fake" mode that
-    enables it to compute how much memory it would need, while actually only
-    ever using a few hundred bytes of working memory and without too many
-    tests of the mode. This should make future maintenance and development
-    easier. A side effect of this work is that the limit of 200 on the nesting
-    depth of parentheses has been removed (though this was never a serious
-    limitation, I suspect). However, there is a downside: pcre_compile() now
-    runs more slowly than before (30% or more, depending on the pattern). I
-    hope this isn't a big issue. There is no effect on runtime performance.
-18. Fixed a minor bug in pcretest: if a pattern line was not terminated by a
-    newline (only possible for the last line of a file) and it was a
-    pattern that set a locale (followed by /Lsomething), pcretest crashed.
-19. Added additional timing features to pcretest. (1) The -tm option now times
-    matching only, not compiling. (2) Both -t and -tm can be followed, as a
-    separate command line item, by a number that specifies the number of
-    repeats to use when timing. The default is 50000; this gives better
-    precision, but takes uncomfortably long for very large patterns.
-20. Extended pcre_study() to be more clever in cases where a branch of a
-    subpattern has no definite first character. For example, (a*|b*)[cd] would
-    previously give no result from pcre_study(). Now it recognizes that the
-    first character must be a, b, c, or d.
-21. There was an incorrect error "recursive call could loop indefinitely" if
-    a subpattern (or the entire pattern) that was being tested for matching an
-    empty string contained only one non-empty item after a nested subpattern.
-    For example, the pattern (?>\x{100}*)\d(?R) provoked this error
-    incorrectly, because the \d was being skipped in the check.
-22. The pcretest program now has a new pattern option /B and a command line
-    option -b, which is equivalent to adding /B to every pattern. This causes
-    it to show the compiled bytecode, without the additional information that
-    -d shows. The effect of -d is now the same as -b with -i (and similarly, /D
-    is the same as /B/I).
-23. A new optimization is now able automatically to treat some sequences such
-    as a*b as a*+b. More specifically, if something simple (such as a character
-    or a simple class like \d) has an unlimited quantifier, and is followed by
-    something that cannot possibly match the quantified thing, the quantifier
-    is automatically "possessified".
-24. A recursive reference to a subpattern whose number was greater than 39
-    went wrong under certain circumstances in UTF-8 mode. This bug could also
-    have affected the operation of pcre_study().
-25. Realized that a little bit of performance could be had by replacing
-    (c & 0xc0) == 0xc0 with c >= 0xc0 when processing UTF-8 characters.
-26. Timing data from pcretest is now shown to 4 decimal places instead of 3.
-27. Possessive quantifiers such as a++ were previously implemented by turning
-    them into atomic groups such as ($>a+). Now they have their own opcodes,
-    which improves performance. This includes the automatically created ones
-    from 23 above.
-28. A pattern such as (?=(\w+))\1: which simulates an atomic group using a
-    lookahead was broken if it was not anchored. PCRE was mistakenly expecting
-    the first matched character to be a colon. This applied both to named and
-    numbered groups.
-29. The ucpinternal.h header file was missing its idempotency #ifdef.
-30. I was sent a "project" file called which I understand makes
-    building PCRE on Windows easier, so I have included it in the distribution.
-31. There is now a check in pcretest against a ridiculously large number being
-    returned by pcre_exec() or pcre_dfa_exec(). If this happens in a /g or /G
-    loop, the loop is abandoned.
-32. Forward references to subpatterns in conditions such as (?(2)...) where
-    subpattern 2 is defined later cause pcre_compile() to search forwards in
-    the pattern for the relevant set of parentheses. This search went wrong
-    when there were unescaped parentheses in a character class, parentheses
-    escaped with \Q...\E, or parentheses in a #-comment in /x mode.
-33. "Subroutine" calls and backreferences were previously restricted to
-    referencing subpatterns earlier in the regex. This restriction has now
-    been removed.
-34. Added a number of extra features that are going to be in Perl 5.10. On the
-    whole, these are just syntactic alternatives for features that PCRE had
-    previously implemented using the Python syntax or my own invention. The
-    other formats are all retained for compatibility.
-    (a) Named groups can now be defined as (?<name>...) or (?'name'...) as well
-        as (?P<name>...). The new forms, as well as being in Perl 5.10, are
-        also .NET compatible.
-    (b) A recursion or subroutine call to a named group can now be defined as
-        (?&name) as well as (?P>name).
-    (c) A backreference to a named group can now be defined as \k<name> or
-        \k'name' as well as (?P=name). The new forms, as well as being in Perl
-        5.10, are also .NET compatible.
-    (d) A conditional reference to a named group can now use the syntax
-        (?(<name>) or (?('name') as well as (?(name).
-    (e) A "conditional group" of the form (?(DEFINE)...) can be used to define
-        groups (named and numbered) that are never evaluated inline, but can be
-        called as "subroutines" from elsewhere. In effect, the DEFINE condition
-        is always false. There may be only one alternative in such a group.
-    (f) A test for recursion can be given as (?(R1).. or (?(R&name)... as well
-        as the simple (?(R). The condition is true only if the most recent
-        recursion is that of the given number or name. It does not search out
-        through the entire recursion stack.
-    (g) The escape \gN or \g{N} has been added, where N is a positive or
-        negative number, specifying an absolute or relative reference.
-35. Tidied to get rid of some further signed/unsigned compiler warnings and
-    some "unreachable code" warnings.
-36. Updated the Unicode property tables to Unicode version 5.0.0. Amongst other
-    things, this adds five new scripts.
-37. Perl ignores orphaned \E escapes completely. PCRE now does the same.
-    There were also incompatibilities regarding the handling of \Q..\E inside
-    character classes, for example with patterns like [\Qa\E-\Qz\E] where the
-    hyphen was adjacent to \Q or \E. I hope I've cleared all this up now.
-38. Like Perl, PCRE detects when an indefinitely repeated parenthesized group
-    matches an empty string, and forcibly breaks the loop. There were bugs in
-    this code in non-simple cases. For a pattern such as  ^(a()*)*  matched
-    against  aaaa  the result was just "a" rather than "aaaa", for example. Two
-    separate and independent bugs (that affected different cases) have been
-    fixed.
-39. Refactored the code to abolish the use of different opcodes for small
-    capturing bracket numbers. This is a tidy that I avoided doing when I
-    removed the limit on the number of capturing brackets for 3.5 back in 2001.
-    The new approach is not only tidier, it makes it possible to reduce the
-    memory needed to fix the previous bug (38).
-40. Implemented PCRE_NEWLINE_ANY to recognize any of the Unicode newline
-    sequences ( as "newline" when
-    processing dot, circumflex, or dollar metacharacters, or #-comments in /x
-    mode.
-41. Add \R to match any Unicode newline sequence, as suggested in the Unicode
-    report.
-42. Applied patch, originally from Ari Pollak, modified by Google, to allow
-    copy construction and assignment in the C++ wrapper.
-43. Updated pcregrep to support "--newline=any". In the process, I fixed a
-    couple of bugs that could have given wrong results in the "--newline=crlf"
-    case.
-44. Added a number of casts and did some reorganization of signed/unsigned int
-    variables following suggestions from Dair Grant. Also renamed the variable
-    "this" as "item" because it is a C++ keyword.
-45. Arranged for dftables to add
-      #include "pcre_internal.h"
-    to pcre_chartables.c because without it, gcc 4.x may remove the array
-    definition from the final binary if PCRE is built into a static library and
-    dead code stripping is activated.
-46. For an unanchored pattern, if a match attempt fails at the start of a
-    newline sequence, and the newline setting is CRLF or ANY, and the next two
-    characters are CRLF, advance by two characters instead of one.
-Version 6.7 04-Jul-06
- 1. In order to handle tests when input lines are enormously long, pcretest has
-    been re-factored so that it automatically extends its buffers when
-    necessary. The code is crude, but this _is_ just a test program. The
-    default size has been increased from 32K to 50K.
- 2. The code in pcre_study() was using the value of the re argument before
-    testing it for NULL. (Of course, in any sensible call of the function, it
-    won't be NULL.)
- 3. The memmove() emulation function in pcre_internal.h, which is used on
-    systems that lack both memmove() and bcopy() - that is, hardly ever -
-    was missing a "static" storage class specifier.
- 4. When UTF-8 mode was not set, PCRE looped when compiling certain patterns
-    containing an extended class (one that cannot be represented by a bitmap
-    because it contains high-valued characters or Unicode property items, e.g.
-    [\pZ]). Almost always one would set UTF-8 mode when processing such a
-    pattern, but PCRE should not loop if you do not (it no longer does).
-    [Detail: two cases were found: (a) a repeated subpattern containing an
-    extended class; (b) a recursive reference to a subpattern that followed a
-    previous extended class. It wasn't skipping over the extended class
-    correctly when UTF-8 mode was not set.]
- 5. A negated single-character class was not being recognized as fixed-length
-    in lookbehind assertions such as (?<=[^f]), leading to an incorrect
-    compile error "lookbehind assertion is not fixed length".
- 6. The RunPerlTest auxiliary script was showing an unexpected difference
-    between PCRE and Perl for UTF-8 tests. It turns out that it is hard to
-    write a Perl script that can interpret lines of an input file either as
-    byte characters or as UTF-8, which is what "perltest" was being required to
-    do for the non-UTF-8 and UTF-8 tests, respectively. Essentially what you
-    can't do is switch easily at run time between having the "use utf8;" pragma
-    or not. In the end, I fudged it by using the RunPerlTest script to insert
-    "use utf8;" explicitly for the UTF-8 tests.
- 7. In multiline (/m) mode, PCRE was matching ^ after a terminating newline at
-    the end of the subject string, contrary to the documentation and to what
-    Perl does. This was true of both matching functions. Now it matches only at
-    the start of the subject and immediately after *internal* newlines.
- 8. A call of pcre_fullinfo() from pcretest to get the option bits was passing
-    a pointer to an int instead of a pointer to an unsigned long int. This
-    caused problems on 64-bit systems.
- 9. Applied a patch from the folks at Google to, to fix "another
-    instance of the 'standard' template library not being so standard".
-10. There was no check on the number of named subpatterns nor the maximum
-    length of a subpattern name. The product of these values is used to compute
-    the size of the memory block for a compiled pattern. By supplying a very
-    long subpattern name and a large number of named subpatterns, the size
-    computation could be caused to overflow. This is now prevented by limiting
-    the length of names to 32 characters, and the number of named subpatterns
-    to 10,000.
-11. Subpatterns that are repeated with specific counts have to be replicated in
-    the compiled pattern. The size of memory for this was computed from the
-    length of the subpattern and the repeat count. The latter is limited to
-    65535, but there was no limit on the former, meaning that integer overflow
-    could in principle occur. The compiled length of a repeated subpattern is
-    now limited to 30,000 bytes in order to prevent this.
-12. Added the optional facility to have named substrings with the same name.
-13. Added the ability to use a named substring as a condition, using the
-    Python syntax: (?(name)yes|no). This overloads (?(R)... and names that
-    are numbers (not recommended). Forward references are permitted.
-14. Added forward references in named backreferences (if you see what I mean).
-15. In UTF-8 mode, with the PCRE_DOTALL option set, a quantified dot in the
-    pattern could run off the end of the subject. For example, the pattern
-    "(?s)(.{1,5})"8 did this with the subject "ab".
-16. If PCRE_DOTALL or PCRE_MULTILINE were set, pcre_dfa_exec() behaved as if
-    PCRE_CASELESS was set when matching characters that were quantified with ?
-    or *.
-17. A character class other than a single negated character that had a minimum
-    but no maximum quantifier - for example [ab]{6,} - was not handled
-    correctly by pce_dfa_exec(). It would match only one character.
-18. A valid (though odd) pattern that looked like a POSIX character
-    class but used an invalid character after [ (for example [[,abc,]]) caused
-    pcre_compile() to give the error "Failed: internal error: code overflow" or
-    in some cases to crash with a glibc free() error. This could even happen if
-    the pattern terminated after [[ but there just happened to be a sequence of
-    letters, a binary zero, and a closing ] in the memory that followed.
-19. Perl's treatment of octal escapes in the range \400 to \777 has changed
-    over the years. Originally (before any Unicode support), just the bottom 8
-    bits were taken. Thus, for example, \500 really meant \100. Nowadays the
-    output from "man perlunicode" includes this:
-      The regular expression compiler produces polymorphic opcodes.  That
-      is, the pattern adapts to the data and automatically switches to
-      the Unicode character scheme when presented with Unicode data--or
-      instead uses a traditional byte scheme when presented with byte
-      data.
-    Sadly, a wide octal escape does not cause a switch, and in a string with
-    no other multibyte characters, these octal escapes are treated as before.
-    Thus, in Perl, the pattern  /\500/ actually matches \100 but the pattern
-    /\500|\x{1ff}/ matches \500 or \777 because the whole thing is treated as a
-    Unicode string.
-    I have not perpetrated such confusion in PCRE. Up till now, it took just
-    the bottom 8 bits, as in old Perl. I have now made octal escapes with
-    values greater than \377 illegal in non-UTF-8 mode. In UTF-8 mode they
-    translate to the appropriate multibyte character.
-29. Applied some refactoring to reduce the number of warnings from Microsoft
-    and Borland compilers. This has included removing the fudge introduced
-    seven years ago for the OS/2 compiler (see 2.02/2 below) because it caused
-    a warning about an unused variable.
-21. PCRE has not included VT (character 0x0b) in the set of whitespace
-    characters since release 4.0, because Perl (from release 5.004) does not.
-    [Or at least, is documented not to: some releases seem to be in conflict
-    with the documentation.] However, when a pattern was studied with
-    pcre_study() and all its branches started with \s, PCRE still included VT
-    as a possible starting character. Of course, this did no harm; it just
-    caused an unnecessary match attempt.
-22. Removed a now-redundant internal flag bit that recorded the fact that case
-    dependency changed within the pattern. This was once needed for "required
-    byte" processing, but is no longer used. This recovers a now-scarce options
-    bit. Also moved the least significant internal flag bit to the most-
-    significant bit of the word, which was not previously used (hangover from
-    the days when it was an int rather than a uint) to free up another bit for
-    the future.
-23. Added support for CRLF line endings as well as CR and LF. As well as the
-    default being selectable at build time, it can now be changed at runtime
-    via the PCRE_NEWLINE_xxx flags. There are now options for pcregrep to
-    specify that it is scanning data with non-default line endings.
-24. Changed the definition of CXXLINK to make it agree with the definition of
-    LINK in the Makefile, by replacing LDFLAGS to CXXFLAGS.
-25. Applied Ian Taylor's patches to avoid using another stack frame for tail
-    recursions. This makes a big different to stack usage for some patterns.
-26. If a subpattern containing a named recursion or subroutine reference such
-    as (?P>B) was quantified, for example (xxx(?P>B)){3}, the calculation of
-    the space required for the compiled pattern went wrong and gave too small a
-    value. Depending on the environment, this could lead to "Failed: internal
-    error: code overflow at offset 49" or "glibc detected double free or
-    corruption" errors.
-27. Applied patches from Google (a) to support the new newline modes and (b) to
-    advance over multibyte UTF-8 characters in GlobalReplace.
-28. Change free() to pcre_free() in pcredemo.c. Apparently this makes a
-    difference for some implementation of PCRE in some Windows version.
-29. Added some extra testing facilities to pcretest:
-    \q<number>   in a data line sets the "match limit" value
-    \Q<number>   in a data line sets the "match recursion limt" value
-    -S <number>  sets the stack size, where <number> is in megabytes
-    The -S option isn't available for Windows.
-Version 6.6 06-Feb-06
- 1. Change 16(a) for 6.5 broke things, because PCRE_DATA_SCOPE was not defined
-    in pcreposix.h. I have copied the definition from pcre.h.
- 2. Change 25 for 6.5 broke compilation in a build directory out-of-tree
-    because pcre.h is no longer a built file.
- 3. Added Jeff Friedl's additional debugging patches to pcregrep. These are
-    not normally included in the compiled code.
-Version 6.5 01-Feb-06
- 1. When using the partial match feature with pcre_dfa_exec(), it was not
-    anchoring the second and subsequent partial matches at the new starting
-    point. This could lead to incorrect results. For example, with the pattern
-    /1234/, partially matching against "123" and then "a4" gave a match.
- 2. Changes to pcregrep:
-    (a) All non-match returns from pcre_exec() were being treated as failures
-        to match the line. Now, unless the error is PCRE_ERROR_NOMATCH, an
-        error message is output. Some extra information is given for the
-        probably the only errors that are likely to be caused by users (by
-        specifying a regex that has nested indefinite repeats, for instance).
-        If there are more than 20 of these errors, pcregrep is abandoned.
-    (b) A binary zero was treated as data while matching, but terminated the
-        output line if it was written out. This has been fixed: binary zeroes
-        are now no different to any other data bytes.
-    (c) Whichever of the LC_ALL or LC_CTYPE environment variables is set is
-        used to set a locale for matching. The --locale=xxxx long option has
-        been added (no short equivalent) to specify a locale explicitly on the
-        pcregrep command, overriding the environment variables.
-    (d) When -B was used with -n, some line numbers in the output were one less
-        than they should have been.
-    (e) Added the -o (--only-matching) option.
-    (f) If -A or -C was used with -c (count only), some lines of context were
-        accidentally printed for the final match.
-    (g) Added the -H (--with-filename) option.
-    (h) The combination of options -rh failed to suppress file names for files
-        that were found from directory arguments.
-    (i) Added the -D (--devices) and -d (--directories) options.
-    (j) Added the -F (--fixed-strings) option.
-    (k) Allow "-" to be used as a file name for -f as well as for a data file.
-    (l) Added the --colo(u)r option.
-    (m) Added Jeffrey Friedl's -S testing option, but within #ifdefs so that it
-        is not present by default.
- 3. A nasty bug was discovered in the handling of recursive patterns, that is,
-    items such as (?R) or (?1), when the recursion could match a number of
-    alternatives. If it matched one of the alternatives, but subsequently,
-    outside the recursion, there was a failure, the code tried to back up into
-    the recursion. However, because of the way PCRE is implemented, this is not
-    possible, and the result was an incorrect result from the match.
-    In order to prevent this happening, the specification of recursion has
-    been changed so that all such subpatterns are automatically treated as
-    atomic groups. Thus, for example, (?R) is treated as if it were (?>(?R)).
- 4. I had overlooked the fact that, in some locales, there are characters for
-    which isalpha() is true but neither isupper() nor islower() are true. In
-    the fr_FR locale, for instance, the \xAA and \xBA characters (ordmasculine
-    and ordfeminine) are like this. This affected the treatment of \w and \W
-    when they appeared in character classes, but not when they appeared outside
-    a character class. The bit map for "word" characters is now created
-    separately from the results of isalnum() instead of just taking it from the
-    upper, lower, and digit maps. (Plus the underscore character, of course.)
- 5. The above bug also affected the handling of POSIX character classes such as
-    [[:alpha:]] and [[:alnum:]]. These do not have their own bit maps in PCRE's
-    permanent tables. Instead, the bit maps for such a class were previously
-    created as the appropriate unions of the upper, lower, and digit bitmaps.
-    Now they are created by subtraction from the [[:word:]] class, which has
-    its own bitmap.
- 6. The [[:blank:]] character class matches horizontal, but not vertical space.
-    It is created by subtracting the vertical space characters (\x09, \x0a,
-    \x0b, \x0c) from the [[:space:]] bitmap. Previously, however, the
-    subtraction was done in the overall bitmap for a character class, meaning
-    that a class such as [\x0c[:blank:]] was incorrect because \x0c would not
-    be recognized. This bug has been fixed.
- 7. Patches from the folks at Google:
-      (a) "to handle a corner case that may or may not happen in
-      real life, but is still worth protecting against".
-      (b) "corrects a bug when negative radixes are used with
-      regular expressions".
-      (c) avoid use of std::count() because not all systems
-      have it.
-      (d) Split off pcrecpparg.h from pcrecpp.h and had the former built by
-      "configure" and the latter not, in order to fix a problem somebody had
-      with compiling the Arg class on HP-UX.
-      (e) Improve the error-handling of the C++ wrapper a little bit.
-      (f) New tests for checking recursion limiting.
- 8. The pcre_memmove() function, which is used only if the environment does not
-    have a standard memmove() function (and is therefore rarely compiled),
-    contained two bugs: (a) use of int instead of size_t, and (b) it was not
-    returning a result (though PCRE never actually uses the result).
- 9. In the POSIX regexec() interface, if nmatch is specified as a ridiculously
-    large number - greater than INT_MAX/(3*sizeof(int)) - REG_ESPACE is
-    returned instead of calling malloc() with an overflowing number that would
-    most likely cause subsequent chaos.
-10. The debugging option of pcretest was not showing the NO_AUTO_CAPTURE flag.
-11. The POSIX flag REG_NOSUB is now supported. When a pattern that was compiled
-    with this option is matched, the nmatch and pmatch options of regexec() are
-    ignored.
-12. Added REG_UTF8 to the POSIX interface. This is not defined by POSIX, but is
-    provided in case anyone wants to the the POSIX interface with UTF-8
-    strings.
-13. Added CXXLDFLAGS to the Makefile parameters to provide settings only on the
-    C++ linking (needed for some HP-UX environments).
-14. Avoid compiler warnings in get_ucpname() when compiled without UCP support
-    (unused parameter) and in the pcre_printint() function (omitted "default"
-    switch label when the default is to do nothing).
-15. Added some code to make it possible, when PCRE is compiled as a C++
-    library, to replace subject pointers for pcre_exec() with a smart pointer
-    class, thus making it possible to process discontinuous strings.
-16. The two macros PCRE_EXPORT and PCRE_DATA_SCOPE are confusing, and perform
-    much the same function. They were added by different people who were trying
-    to make PCRE easy to compile on non-Unix systems. It has been suggested
-    that PCRE_EXPORT be abolished now that there is more automatic apparatus
-    for compiling on Windows systems. I have therefore replaced it with
-    PCRE_DATA_SCOPE. This is set automatically for Windows; if not set it
-    defaults to "extern" for C or "extern C" for C++, which works fine on
-    Unix-like systems. It is now possible to override the value of PCRE_DATA_
-    SCOPE with something explicit in config.h. In addition:
-    (a) pcreposix.h still had just "extern" instead of either of these macros;
-        I have replaced it with PCRE_DATA_SCOPE.
-    (b) Functions such as _pcre_xclass(), which are internal to the library,
-        but external in the C sense, all had PCRE_EXPORT in their definitions.
-        This is apparently wrong for the Windows case, so I have removed it.
-        (It makes no difference on Unix-like systems.)
-17. Added a new limit, MATCH_LIMIT_RECURSION, which limits the depth of nesting
-    of recursive calls to match(). This is different to MATCH_LIMIT because
-    that limits the total number of calls to match(), not all of which increase
-    the depth of recursion. Limiting the recursion depth limits the amount of
-    stack (or heap if NO_RECURSE is set) that is used. The default can be set
-    when PCRE is compiled, and changed at run time. A patch from Google adds
-    this functionality to the C++ interface.
-18. Changes to the handling of Unicode character properties:
-    (a) Updated the table to Unicode 4.1.0.
-    (b) Recognize characters that are not in the table as "Cn" (undefined).
-    (c) I revised the way the table is implemented to a much improved format
-        which includes recognition of ranges. It now supports the ranges that
-        are defined in UnicodeData.txt, and it also amalgamates other
-        characters into ranges. This has reduced the number of entries in the
-        table from around 16,000 to around 3,000, thus reducing its size
-        considerably. I realized I did not need to use a tree structure after
-        all - a binary chop search is just as efficient. Having reduced the
-        number of entries, I extended their size from 6 bytes to 8 bytes to
-        allow for more data.
-    (d) Added support for Unicode script names via properties such as \p{Han}.
-19. In UTF-8 mode, a backslash followed by a non-Ascii character was not
-    matching that character.
-20. When matching a repeated Unicode property with a minimum greater than zero,
-    (for example \pL{2,}), PCRE could look past the end of the subject if it
-    reached it while seeking the minimum number of characters. This could
-    happen only if some of the characters were more than one byte long, because
-    there is a check for at least the minimum number of bytes.
-21. Refactored the implementation of \p and \P so as to be more general, to
-    allow for more different types of property in future. This has changed the
-    compiled form incompatibly. Anybody with saved compiled patterns that use
-    \p or \P will have to recompile them.
-22. Added "Any" and "L&" to the supported property types.
-23. Recognize \x{...} as a code point specifier, even when not in UTF-8 mode,
-    but give a compile time error if the value is greater than 0xff.
-24. The man pages for pcrepartial, pcreprecompile, and pcre_compile2 were
-    accidentally not being installed or uninstalled.
-25. The pcre.h file was built from, but the only changes that were
-    made were to insert the current release number. This seemed silly, because
-    it made things harder for people building PCRE on systems that don't run
-    "configure". I have turned pcre.h into a distributed file, no longer built
-    by "configure", with the version identification directly included. There is
-    no longer a file.
-    However, this change necessitated a change to the pcre-config script as
-    well. It is built from, and one of the substitutions was the
-    release number. I have updated so that ./configure now finds
-    the release number by grepping pcre.h.
-26. Added the ability to run the tests under valgrind.
-Version 6.4 05-Sep-05
- 1. Change 6.0/10/(l) to pcregrep introduced a bug that caused separator lines
-    "--" to be printed when multiple files were scanned, even when none of the
-    -A, -B, or -C options were used. This is not compatible with Gnu grep, so I
-    consider it to be a bug, and have restored the previous behaviour.
- 2. A couple of code tidies to get rid of compiler warnings.
- 3. The pcretest program used to cheat by referring to symbols in the library
-    whose names begin with _pcre_. These are internal symbols that are not
-    really supposed to be visible externally, and in some environments it is
-    possible to suppress them. The cheating is now confined to including
-    certain files from the library's source, which is a bit cleaner.
- 4. Renamed as to go with; it also makes the
-    file's purpose clearer.
- 5. Reorganized pcre_ucp_findchar().
-Version 6.3 15-Aug-05
- 1. The file did not have general read permission in the tarball.
- 2. There were some problems when building without C++ support:
-    (a) If C++ support was not built, "make install" and "make test" still
-        tried to test it.
-    (b) There were problems when the value of CXX was explicitly set. Some
-        changes have been made to try to fix these, and ...
-    (c) --disable-cpp can now be used to explicitly disable C++ support.
-    (d) The use of @CPP_OBJ@ directly caused a blank line preceded by a
-        backslash in a target when C++ was disabled. This confuses some
-        versions of "make", apparently. Using an intermediate variable solves
-        this. (Same for CPP_LOBJ.)
- 3. $(LINK_FOR_BUILD) now includes $(CFLAGS_FOR_BUILD) and $(LINK)
-    (non-Windows) now includes $(CFLAGS) because these flags are sometimes
-    necessary on certain architectures.
- 4. Added a setting of -export-symbols-regex to the link command to remove
-    those symbols that are exported in the C sense, but actually are local
-    within the library, and not documented. Their names all begin with
-    "_pcre_". This is not a perfect job, because (a) we have to except some
-    symbols that pcretest ("illegally") uses, and (b) the facility isn't always
-    available (and never for static libraries). I have made a note to try to
-    find a way round (a) in the future.
-Version 6.2 01-Aug-05
- 1. There was no test for integer overflow of quantifier values. A construction
-    such as {1111111111111111} would give undefined results. What is worse, if
-    a minimum quantifier for a parenthesized subpattern overflowed and became
-    negative, the calculation of the memory size went wrong. This could have
-    led to memory overwriting.
- 2. Building PCRE using VPATH was broken. Hopefully it is now fixed.
- 3. Added "b" to the 2nd argument of fopen() in dftables.c, for non-Unix-like
-    operating environments where this matters.
- 4. Applied Giuseppe Maxia's patch to add additional features for controlling
-    PCRE options from within the C++ wrapper.
- 5. Named capturing subpatterns were not being correctly counted when a pattern
-    was compiled. This caused two problems: (a) If there were more than 100
-    such subpatterns, the calculation of the memory needed for the whole
-    compiled pattern went wrong, leading to an overflow error. (b) Numerical
-    back references of the form \12, where the number was greater than 9, were
-    not recognized as back references, even though there were sufficient
-    previous subpatterns.
- 6. Two minor patches to in order to allow it to compile on older
-    versions of gcc, e.g. 2.95.4.
-Version 6.1 21-Jun-05
- 1. There was one reference to the variable "posix" in pcretest.c that was not
-    surrounded by "#if !defined NOPOSIX".
- 2. Make it possible to compile pcretest without DFA support, UTF8 support, or
-    the cross-check on the old pcre_info() function, for the benefit of the
-    cut-down version of PCRE that is currently imported into Exim.
- 3. A (silly) pattern starting with (?i)(?-i) caused an internal space
-    allocation error. I've done the easy fix, which wastes 2 bytes for sensible
-    patterns that start (?i) but I don't think that matters. The use of (?i) is
-    just an example; this all applies to the other options as well.
- 4. Since libtool seems to echo the compile commands it is issuing, the output
-    from "make" can be reduced a bit by putting "@" in front of each libtool
-    compile command.
- 5. Patch from the folks at Google for to be a bit more thorough
-    in checking for a suitable C++ installation before trying to compile the
-    C++ stuff. This should fix a reported problem when a compiler was present,
-    but no suitable headers.
- 6. The man pages all had just "PCRE" as their title. I have changed them to
-    be the relevant file name. I have also arranged that these names are
-    retained in the file doc/pcre.txt, which is a concatenation in text format
-    of all the man pages except the little individual ones for each function.
- 7. The NON-UNIX-USE file had not been updated for the different set of source
-    files that come with release 6. I also added a few comments about the C++
-    wrapper.
-Version 6.0 07-Jun-05
- 1. Some minor internal re-organization to help with my DFA experiments.
- 2. Some missing #ifdef SUPPORT_UCP conditionals in pcretest and printint that
-    didn't matter for the library itself when fully configured, but did matter
-    when compiling without UCP support, or within Exim, where the ucp files are
-    not imported.
- 3. Refactoring of the library code to split up the various functions into
-    different source modules. The addition of the new DFA matching code (see
-    below) to a single monolithic source would have made it really too
-    unwieldy, quite apart from causing all the code to be include in a
-    statically linked application, when only some functions are used. This is
-    relevant even without the DFA addition now that patterns can be compiled in
-    one application and matched in another.
-    The downside of splitting up is that there have to be some external
-    functions and data tables that are used internally in different modules of
-    the library but which are not part of the API. These have all had their
-    names changed to start with "_pcre_" so that they are unlikely to clash
-    with other external names.
- 4. Added an alternate matching function, pcre_dfa_exec(), which matches using
-    a different (DFA) algorithm. Although it is slower than the original
-    function, it does have some advantages for certain types of matching
-    problem.
- 5. Upgrades to pcretest in order to test the features of pcre_dfa_exec(),
-    including restarting after a partial match.
- 6. A patch for pcregrep that defines INVALID_FILE_ATTRIBUTES if it is not
-    defined when compiling for Windows was sent to me. I have put it into the
-    code, though I have no means of testing or verifying it.
- 7. Added the pcre_refcount() auxiliary function.
- 8. Added the PCRE_FIRSTLINE option. This constrains an unanchored pattern to
-    match before or at the first newline in the subject string. In pcretest,
-    the /f option on a pattern can be used to set this.
- 9. A repeated \w when used in UTF-8 mode with characters greater than 256
-    would behave wrongly. This has been present in PCRE since release 4.0.
-10. A number of changes to the pcregrep command:
-    (a) Refactored how -x works; insert ^(...)$ instead of setting
-        PCRE_ANCHORED and checking the length, in preparation for adding
-        something similar for -w.
-    (b) Added the -w (match as a word) option.
-    (c) Refactored the way lines are read and buffered so as to have more
-        than one at a time available.
-    (d) Implemented a pcregrep test script.
-    (e) Added the -M (multiline match) option. This allows patterns to match
-        over several lines of the subject. The buffering ensures that at least
-        8K, or the rest of the document (whichever is the shorter) is available
-        for matching (and similarly the previous 8K for lookbehind assertions).
-    (f) Changed the --help output so that it now says
-          -w, --word-regex(p)
-        instead of two lines, one with "regex" and the other with "regexp"
-        because that confused at least one person since the short forms are the
-        same. (This required a bit of code, as the output is generated
-        automatically from a table. It wasn't just a text change.)
-    (g) -- can be used to terminate pcregrep options if the next thing isn't an
-        option but starts with a hyphen. Could be a pattern or a path name
-        starting with a hyphen, for instance.
-    (h) "-" can be given as a file name to represent stdin.
-    (i) When file names are being printed, "(standard input)" is used for
-        the standard input, for compatibility with GNU grep. Previously
-        "<stdin>" was used.
-    (j) The option --label=xxx can be used to supply a name to be used for
-        stdin when file names are being printed. There is no short form.
-    (k) Re-factored the options decoding logic because we are going to add
-        two more options that take data. Such options can now be given in four
-        different ways, e.g. "-fname", "-f name", "--file=name", "--file name".
-    (l) Added the -A, -B, and -C options for requesting that lines of context
-        around matches be printed.
-    (m) Added the -L option to print the names of files that do not contain
-        any matching lines, that is, the complement of -l.
-    (n) The return code is 2 if any file cannot be opened, but pcregrep does
-        continue to scan other files.
-    (o) The -s option was incorrectly implemented. For compatibility with other
-        greps, it now suppresses the error message for a non-existent or non-
-        accessible file (but not the return code). There is a new option called
-        -q that suppresses the output of matching lines, which was what -s was
-        previously doing.
-    (p) Added --include and --exclude options to specify files for inclusion
-        and exclusion when recursing.
-11. The Makefile was not using the Autoconf-supported LDFLAGS macro properly.
-    Hopefully, it now does.
-12. Missing cast in pcre_study().
-13. Added an "uninstall" target to the makefile.
-14. Replaced "extern" in the function prototypes in with
-    "PCRE_DATA_SCOPE", which defaults to 'extern' or 'extern "C"' in the Unix
-    world, but is set differently for Windows.
-15. Added a second compiling function called pcre_compile2(). The only
-    difference is that it has an extra argument, which is a pointer to an
-    integer error code. When there is a compile-time failure, this is set
-    non-zero, in addition to the error test pointer being set to point to an
-    error message. The new argument may be NULL if no error number is required
-    (but then you may as well call pcre_compile(), which is now just a
-    wrapper). This facility is provided because some applications need a
-    numeric error indication, but it has also enabled me to tidy up the way
-    compile-time errors are handled in the POSIX wrapper.
-16. Added VPATH=.libs to the makefile; this should help when building with one
-    prefix path and installing with another. (Or so I'm told by someone who
-    knows more about this stuff than I do.)
-17. Added a new option, REG_DOTALL, to the POSIX function regcomp(). This
-    passes PCRE_DOTALL to the pcre_compile() function, making the "." character
-    match everything, including newlines. This is not POSIX-compatible, but
-    somebody wanted the feature. From pcretest it can be activated by using
-    both the P and the s flags.
-18. AC_PROG_LIBTOOL appeared twice in Removed one.
-19. libpcre.pc was being incorrectly installed as executable.
-20. A couple of places in pcretest check for end-of-line by looking for '\n';
-    it now also looks for '\r' so that it will work unmodified on Windows.
-21. Added Google's contributed C++ wrapper to the distribution.
-22. Added some untidy missing memory free() calls in pcretest, to keep
-    Electric Fence happy when testing.
 Version 5.0 13-Sep-04

View raw message