tools/pcre/ChangeLog
changeset 2762 d2d467bf1b5a
child 3831 babd0eee3c5e
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/tools/pcre/ChangeLog	Tue Jul 28 17:51:34 2009 -0400
     1.3 @@ -0,0 +1,3508 @@
     1.4 +ChangeLog for PCRE
     1.5 +------------------
     1.6 +
     1.7 +Version 7.9 11-Apr-09
     1.8 +---------------------
     1.9 +
    1.10 +1.  When building with support for bzlib/zlib (pcregrep) and/or readline
    1.11 +    (pcretest), all targets were linked against these libraries. This included
    1.12 +    libpcre, libpcreposix, and libpcrecpp, even though they do not use these
    1.13 +    libraries. This caused unwanted dependencies to be created. This problem
    1.14 +    has been fixed, and now only pcregrep is linked with bzlib/zlib and only
    1.15 +    pcretest is linked with readline.
    1.16 +
    1.17 +2.  The "typedef int BOOL" in pcre_internal.h that was included inside the
    1.18 +    "#ifndef FALSE" condition by an earlier change (probably 7.8/18) has been
    1.19 +    moved outside it again, because FALSE and TRUE are already defined in AIX,
    1.20 +    but BOOL is not.
    1.21 +
    1.22 +3.  The pcre_config() function was treating the PCRE_MATCH_LIMIT and
    1.23 +    PCRE_MATCH_LIMIT_RECURSION values as ints, when they should be long ints.
    1.24 +
    1.25 +4.  The pcregrep documentation said spaces were inserted as well as colons (or
    1.26 +    hyphens) following file names and line numbers when outputting matching
    1.27 +    lines. This is not true; no spaces are inserted. I have also clarified the
    1.28 +    wording for the --colour (or --color) option.
    1.29 +
    1.30 +5.  In pcregrep, when --colour was used with -o, the list of matching strings
    1.31 +    was not coloured; this is different to GNU grep, so I have changed it to be
    1.32 +    the same.
    1.33 +
    1.34 +6.  When --colo(u)r was used in pcregrep, only the first matching substring in
    1.35 +    each matching line was coloured. Now it goes on to look for further matches
    1.36 +    of any of the test patterns, which is the same behaviour as GNU grep.
    1.37 +
    1.38 +7.  A pattern that could match an empty string could cause pcregrep to loop; it
    1.39 +    doesn't make sense to accept an empty string match in pcregrep, so I have
    1.40 +    locked it out (using PCRE's PCRE_NOTEMPTY option). By experiment, this
    1.41 +    seems to be how GNU grep behaves.
    1.42 +
    1.43 +8.  The pattern (?(?=.*b)b|^) was incorrectly compiled as "match must be at
    1.44 +    start or after a newline", because the conditional assertion was not being
    1.45 +    correctly handled. The rule now is that both the assertion and what follows
    1.46 +    in the first alternative must satisfy the test.
    1.47 +
    1.48 +9.  If auto-callout was enabled in a pattern with a conditional group whose
    1.49 +    condition was an assertion, PCRE could crash during matching, both with
    1.50 +    pcre_exec() and pcre_dfa_exec().
    1.51 +
    1.52 +10. The PCRE_DOLLAR_ENDONLY option was not working when pcre_dfa_exec() was
    1.53 +    used for matching.
    1.54 +
    1.55 +11. Unicode property support in character classes was not working for
    1.56 +    characters (bytes) greater than 127 when not in UTF-8 mode.
    1.57 +
    1.58 +12. Added the -M command line option to pcretest.
    1.59 +
    1.60 +14. Added the non-standard REG_NOTEMPTY option to the POSIX interface.
    1.61 +
    1.62 +15. Added the PCRE_NO_START_OPTIMIZE match-time option.
    1.63 +
    1.64 +16. Added comments and documentation about mis-use of no_arg in the C++
    1.65 +    wrapper.
    1.66 +
    1.67 +17. Implemented support for UTF-8 encoding in EBCDIC environments, a patch
    1.68 +    from Martin Jerabek that uses macro names for all relevant character and
    1.69 +    string constants.
    1.70 +
    1.71 +18. Added to pcre_internal.h two configuration checks: (a) If both EBCDIC and
    1.72 +    SUPPORT_UTF8 are set, give an error; (b) If SUPPORT_UCP is set without
    1.73 +    SUPPORT_UTF8, define SUPPORT_UTF8. The "configure" script handles both of
    1.74 +    these, but not everybody uses configure.
    1.75 +
    1.76 +19. A conditional group that had only one branch was not being correctly
    1.77 +    recognized as an item that could match an empty string. This meant that an
    1.78 +    enclosing group might also not be so recognized, causing infinite looping
    1.79 +    (and probably a segfault) for patterns such as ^"((?(?=[a])[^"])|b)*"$
    1.80 +    with the subject "ab", where knowledge that the repeated group can match
    1.81 +    nothing is needed in order to break the loop.
    1.82 +
    1.83 +20. If a pattern that was compiled with callouts was matched using pcre_dfa_
    1.84 +    exec(), but without supplying a callout function, matching went wrong.
    1.85 +
    1.86 +21. If PCRE_ERROR_MATCHLIMIT occurred during a recursion, there was a memory
    1.87 +    leak if the size of the offset vector was greater than 30. When the vector
    1.88 +    is smaller, the saved offsets during recursion go onto a local stack
    1.89 +    vector, but for larger vectors malloc() is used. It was failing to free
    1.90 +    when the recursion yielded PCRE_ERROR_MATCH_LIMIT (or any other "abnormal"
    1.91 +    error, in fact).
    1.92 +
    1.93 +22. There was a missing #ifdef SUPPORT_UTF8 round one of the variables in the
    1.94 +    heapframe that is used only when UTF-8 support is enabled. This caused no
    1.95 +    problem, but was untidy.
    1.96 +
    1.97 +23. Steven Van Ingelgem's patch to CMakeLists.txt to change the name
    1.98 +    CMAKE_BINARY_DIR to PROJECT_BINARY_DIR so that it works when PCRE is
    1.99 +    included within another project.
   1.100 +
   1.101 +24. Steven Van Ingelgem's patches to add more options to the CMake support,
   1.102 +    slightly modified by me:
   1.103 +
   1.104 +      (a) PCRE_BUILD_TESTS can be set OFF not to build the tests, including
   1.105 +          not building pcregrep.
   1.106 +
   1.107 +      (b) PCRE_BUILD_PCREGREP can be see OFF not to build pcregrep, but only
   1.108 +          if PCRE_BUILD_TESTS is also set OFF, because the tests use pcregrep.
   1.109 +
   1.110 +25. Forward references, both numeric and by name, in patterns that made use of
   1.111 +    duplicate group numbers, could behave incorrectly or give incorrect errors,
   1.112 +    because when scanning forward to find the reference group, PCRE was not
   1.113 +    taking into account the duplicate group numbers. A pattern such as
   1.114 +    ^X(?3)(a)(?|(b)|(q))(Y) is an example.
   1.115 +
   1.116 +26. Changed a few more instances of "const unsigned char *" to USPTR, making
   1.117 +    the feature of a custom pointer more persuasive (as requested by a user).
   1.118 +
   1.119 +27. Wrapped the definitions of fileno and isatty for Windows, which appear in
   1.120 +    pcretest.c, inside #ifndefs, because it seems they are sometimes already
   1.121 +    pre-defined.
   1.122 +
   1.123 +28. Added support for (*UTF8) at the start of a pattern.
   1.124 +
   1.125 +29. Arrange for flags added by the "release type" setting in CMake to be shown
   1.126 +    in the configuration summary.
   1.127 +
   1.128 +
   1.129 +Version 7.8 05-Sep-08
   1.130 +---------------------
   1.131 +
   1.132 +1.  Replaced UCP searching code with optimized version as implemented for Ad
   1.133 +    Muncher (http://www.admuncher.com/) by Peter Kankowski. This uses a two-
   1.134 +    stage table and inline lookup instead of a function, giving speed ups of 2
   1.135 +    to 5 times on some simple patterns that I tested. Permission was given to
   1.136 +    distribute the MultiStage2.py script that generates the tables (it's not in
   1.137 +    the tarball, but is in the Subversion repository).
   1.138 +
   1.139 +2.  Updated the Unicode datatables to Unicode 5.1.0. This adds yet more
   1.140 +    scripts.
   1.141 +
   1.142 +3.  Change 12 for 7.7 introduced a bug in pcre_study() when a pattern contained
   1.143 +    a group with a zero qualifier. The result of the study could be incorrect,
   1.144 +    or the function might crash, depending on the pattern.
   1.145 +
   1.146 +4.  Caseless matching was not working for non-ASCII characters in back
   1.147 +    references. For example, /(\x{de})\1/8i was not matching \x{de}\x{fe}.
   1.148 +    It now works when Unicode Property Support is available.
   1.149 +
   1.150 +5.  In pcretest, an escape such as \x{de} in the data was always generating
   1.151 +    a UTF-8 string, even in non-UTF-8 mode. Now it generates a single byte in
   1.152 +    non-UTF-8 mode. If the value is greater than 255, it gives a warning about
   1.153 +    truncation.
   1.154 +
   1.155 +6.  Minor bugfix in pcrecpp.cc (change "" == ... to NULL == ...).
   1.156 +
   1.157 +7.  Added two (int) casts to pcregrep when printing the difference of two
   1.158 +    pointers, in case they are 64-bit values.
   1.159 +
   1.160 +8.  Added comments about Mac OS X stack usage to the pcrestack man page and to
   1.161 +    test 2 if it fails.
   1.162 +
   1.163 +9.  Added PCRE_CALL_CONVENTION just before the names of all exported functions,
   1.164 +    and a #define of that name to empty if it is not externally set. This is to
   1.165 +    allow users of MSVC to set it if necessary.
   1.166 +
   1.167 +10. The PCRE_EXP_DEFN macro which precedes exported functions was missing from
   1.168 +    the convenience functions in the pcre_get.c source file.
   1.169 +
   1.170 +11. An option change at the start of a pattern that had top-level alternatives
   1.171 +    could cause overwriting and/or a crash. This command provoked a crash in
   1.172 +    some environments:
   1.173 +
   1.174 +      printf "/(?i)[\xc3\xa9\xc3\xbd]|[\xc3\xa9\xc3\xbdA]/8\n" | pcretest
   1.175 +
   1.176 +    This potential security problem was recorded as CVE-2008-2371.
   1.177 +
   1.178 +12. For a pattern where the match had to start at the beginning or immediately
   1.179 +    after a newline (e.g /.*anything/ without the DOTALL flag), pcre_exec() and
   1.180 +    pcre_dfa_exec() could read past the end of the passed subject if there was
   1.181 +    no match. To help with detecting such bugs (e.g. with valgrind), I modified
   1.182 +    pcretest so that it places the subject at the end of its malloc-ed buffer.
   1.183 +
   1.184 +13. The change to pcretest in 12 above threw up a couple more cases when pcre_
   1.185 +    exec() might read past the end of the data buffer in UTF-8 mode.
   1.186 +
   1.187 +14. A similar bug to 7.3/2 existed when the PCRE_FIRSTLINE option was set and
   1.188 +    the data contained the byte 0x85 as part of a UTF-8 character within its
   1.189 +    first line. This applied both to normal and DFA matching.
   1.190 +
   1.191 +15. Lazy qualifiers were not working in some cases in UTF-8 mode. For example,
   1.192 +    /^[^d]*?$/8 failed to match "abc".
   1.193 +
   1.194 +16. Added a missing copyright notice to pcrecpp_internal.h.
   1.195 +
   1.196 +17. Make it more clear in the documentation that values returned from
   1.197 +    pcre_exec() in ovector are byte offsets, not character counts.
   1.198 +
   1.199 +18. Tidied a few places to stop certain compilers from issuing warnings.
   1.200 +
   1.201 +19. Updated the Virtual Pascal + BCC files to compile the latest v7.7, as
   1.202 +    supplied by Stefan Weber. I made a further small update for 7.8 because
   1.203 +    there is a change of source arrangements: the pcre_searchfuncs.c module is
   1.204 +    replaced by pcre_ucd.c.
   1.205 +
   1.206 +
   1.207 +Version 7.7 07-May-08
   1.208 +---------------------
   1.209 +
   1.210 +1.  Applied Craig's patch to sort out a long long problem: "If we can't convert
   1.211 +    a string to a long long, pretend we don't even have a long long." This is
   1.212 +    done by checking for the strtoq, strtoll, and _strtoi64 functions.
   1.213 +
   1.214 +2.  Applied Craig's patch to pcrecpp.cc to restore ABI compatibility with
   1.215 +    pre-7.6 versions, which defined a global no_arg variable instead of putting
   1.216 +    it in the RE class. (See also #8 below.)
   1.217 +
   1.218 +3.  Remove a line of dead code, identified by coverity and reported by Nuno
   1.219 +    Lopes.
   1.220 +
   1.221 +4.  Fixed two related pcregrep bugs involving -r with --include or --exclude:
   1.222 +
   1.223 +    (1) The include/exclude patterns were being applied to the whole pathnames
   1.224 +        of files, instead of just to the final components.
   1.225 +
   1.226 +    (2) If there was more than one level of directory, the subdirectories were
   1.227 +        skipped unless they satisfied the include/exclude conditions. This is
   1.228 +        inconsistent with GNU grep (and could even be seen as contrary to the
   1.229 +        pcregrep specification - which I improved to make it absolutely clear).
   1.230 +        The action now is always to scan all levels of directory, and just
   1.231 +        apply the include/exclude patterns to regular files.
   1.232 +
   1.233 +5.  Added the --include_dir and --exclude_dir patterns to pcregrep, and used
   1.234 +    --exclude_dir in the tests to avoid scanning .svn directories.
   1.235 +
   1.236 +6.  Applied Craig's patch to the QuoteMeta function so that it escapes the
   1.237 +    NUL character as backslash + 0 rather than backslash + NUL, because PCRE
   1.238 +    doesn't support NULs in patterns.
   1.239 +
   1.240 +7.  Added some missing "const"s to declarations of static tables in
   1.241 +    pcre_compile.c and pcre_dfa_exec.c.
   1.242 +
   1.243 +8.  Applied Craig's patch to pcrecpp.cc to fix a problem in OS X that was
   1.244 +    caused by fix #2  above. (Subsequently also a second patch to fix the
   1.245 +    first patch. And a third patch - this was a messy problem.)
   1.246 +
   1.247 +9.  Applied Craig's patch to remove the use of push_back().
   1.248 +
   1.249 +10. Applied Alan Lehotsky's patch to add REG_STARTEND support to the POSIX
   1.250 +    matching function regexec().
   1.251 +
   1.252 +11. Added support for the Oniguruma syntax \g<name>, \g<n>, \g'name', \g'n',
   1.253 +    which, however, unlike Perl's \g{...}, are subroutine calls, not back
   1.254 +    references. PCRE supports relative numbers with this syntax (I don't think
   1.255 +    Oniguruma does).
   1.256 +
   1.257 +12. Previously, a group with a zero repeat such as (...){0} was completely
   1.258 +    omitted from the compiled regex. However, this means that if the group
   1.259 +    was called as a subroutine from elsewhere in the pattern, things went wrong
   1.260 +    (an internal error was given). Such groups are now left in the compiled
   1.261 +    pattern, with a new opcode that causes them to be skipped at execution
   1.262 +    time.
   1.263 +
   1.264 +13. Added the PCRE_JAVASCRIPT_COMPAT option. This makes the following changes
   1.265 +    to the way PCRE behaves:
   1.266 +
   1.267 +    (a) A lone ] character is dis-allowed (Perl treats it as data).
   1.268 +
   1.269 +    (b) A back reference to an unmatched subpattern matches an empty string
   1.270 +        (Perl fails the current match path).
   1.271 +
   1.272 +    (c) A data ] in a character class must be notated as \] because if the
   1.273 +        first data character in a class is ], it defines an empty class. (In
   1.274 +        Perl it is not possible to have an empty class.) The empty class []
   1.275 +        never matches; it forces failure and is equivalent to (*FAIL) or (?!).
   1.276 +        The negative empty class [^] matches any one character, independently
   1.277 +        of the DOTALL setting.
   1.278 +
   1.279 +14. A pattern such as /(?2)[]a()b](abc)/ which had a forward reference to a
   1.280 +    non-existent subpattern following a character class starting with ']' and
   1.281 +    containing () gave an internal compiling error instead of "reference to
   1.282 +    non-existent subpattern". Fortunately, when the pattern did exist, the
   1.283 +    compiled code was correct. (When scanning forwards to check for the
   1.284 +    existencd of the subpattern, it was treating the data ']' as terminating
   1.285 +    the class, so got the count wrong. When actually compiling, the reference
   1.286 +    was subsequently set up correctly.)
   1.287 +
   1.288 +15. The "always fail" assertion (?!) is optimzed to (*FAIL) by pcre_compile;
   1.289 +    it was being rejected as not supported by pcre_dfa_exec(), even though
   1.290 +    other assertions are supported. I have made pcre_dfa_exec() support
   1.291 +    (*FAIL).
   1.292 +
   1.293 +16. The implementation of 13c above involved the invention of a new opcode,
   1.294 +    OP_ALLANY, which is like OP_ANY but doesn't check the /s flag. Since /s
   1.295 +    cannot be changed at match time, I realized I could make a small
   1.296 +    improvement to matching performance by compiling OP_ALLANY instead of
   1.297 +    OP_ANY for "." when DOTALL was set, and then removing the runtime tests
   1.298 +    on the OP_ANY path.
   1.299 +
   1.300 +17. Compiling pcretest on Windows with readline support failed without the
   1.301 +    following two fixes: (1) Make the unistd.h include conditional on
   1.302 +    HAVE_UNISTD_H; (2) #define isatty and fileno as _isatty and _fileno.
   1.303 +
   1.304 +18. Changed CMakeLists.txt and cmake/FindReadline.cmake to arrange for the
   1.305 +    ncurses library to be included for pcretest when ReadLine support is
   1.306 +    requested, but also to allow for it to be overridden. This patch came from
   1.307 +    Daniel Bergstr�m.
   1.308 +
   1.309 +19. There was a typo in the file ucpinternal.h where f0_rangeflag was defined
   1.310 +    as 0x00f00000 instead of 0x00800000. Luckily, this would not have caused
   1.311 +    any errors with the current Unicode tables. Thanks to Peter Kankowski for
   1.312 +    spotting this.
   1.313 +
   1.314 +
   1.315 +Version 7.6 28-Jan-08
   1.316 +---------------------
   1.317 +
   1.318 +1.  A character class containing a very large number of characters with
   1.319 +    codepoints greater than 255 (in UTF-8 mode, of course) caused a buffer
   1.320 +    overflow.
   1.321 +
   1.322 +2.  Patch to cut out the "long long" test in pcrecpp_unittest when
   1.323 +    HAVE_LONG_LONG is not defined.
   1.324 +
   1.325 +3.  Applied Christian Ehrlicher's patch to update the CMake build files to
   1.326 +    bring them up to date and include new features. This patch includes:
   1.327 +
   1.328 +    - Fixed PH's badly added libz and libbz2 support.
   1.329 +    - Fixed a problem with static linking.
   1.330 +    - Added pcredemo. [But later removed - see 7 below.]
   1.331 +    - Fixed dftables problem and added an option.
   1.332 +    - Added a number of HAVE_XXX tests, including HAVE_WINDOWS_H and
   1.333 +        HAVE_LONG_LONG.
   1.334 +    - Added readline support for pcretest.
   1.335 +    - Added an listing of the option settings after cmake has run.
   1.336 +
   1.337 +4.  A user submitted a patch to Makefile that makes it easy to create
   1.338 +    "pcre.dll" under mingw when using Configure/Make. I added stuff to
   1.339 +    Makefile.am that cause it to include this special target, without
   1.340 +    affecting anything else. Note that the same mingw target plus all
   1.341 +    the other distribution libraries and programs are now supported
   1.342 +    when configuring with CMake (see 6 below) instead of with
   1.343 +    Configure/Make.
   1.344 +
   1.345 +5.  Applied Craig's patch that moves no_arg into the RE class in the C++ code.
   1.346 +    This is an attempt to solve the reported problem "pcrecpp::no_arg is not
   1.347 +    exported in the Windows port". It has not yet been confirmed that the patch
   1.348 +    solves the problem, but it does no harm.
   1.349 +
   1.350 +6.  Applied Sheri's patch to CMakeLists.txt to add NON_STANDARD_LIB_PREFIX and
   1.351 +    NON_STANDARD_LIB_SUFFIX for dll names built with mingw when configured
   1.352 +    with CMake, and also correct the comment about stack recursion.
   1.353 +
   1.354 +7.  Remove the automatic building of pcredemo from the ./configure system and
   1.355 +    from CMakeLists.txt. The whole idea of pcredemo.c is that it is an example
   1.356 +    of a program that users should build themselves after PCRE is installed, so
   1.357 +    building it automatically is not really right. What is more, it gave
   1.358 +    trouble in some build environments.
   1.359 +
   1.360 +8.  Further tidies to CMakeLists.txt from Sheri and Christian.
   1.361 +
   1.362 +
   1.363 +Version 7.5 10-Jan-08
   1.364 +---------------------
   1.365 +
   1.366 +1.  Applied a patch from Craig: "This patch makes it possible to 'ignore'
   1.367 +    values in parens when parsing an RE using the C++ wrapper."
   1.368 +
   1.369 +2.  Negative specials like \S did not work in character classes in UTF-8 mode.
   1.370 +    Characters greater than 255 were excluded from the class instead of being
   1.371 +    included.
   1.372 +
   1.373 +3.  The same bug as (2) above applied to negated POSIX classes such as
   1.374 +    [:^space:].
   1.375 +
   1.376 +4.  PCRECPP_STATIC was referenced in pcrecpp_internal.h, but nowhere was it
   1.377 +    defined or documented. It seems to have been a typo for PCRE_STATIC, so
   1.378 +    I have changed it.
   1.379 +
   1.380 +5.  The construct (?&) was not diagnosed as a syntax error (it referenced the
   1.381 +    first named subpattern) and a construct such as (?&a) would reference the
   1.382 +    first named subpattern whose name started with "a" (in other words, the
   1.383 +    length check was missing). Both these problems are fixed. "Subpattern name
   1.384 +    expected" is now given for (?&) (a zero-length name), and this patch also
   1.385 +    makes it give the same error for \k'' (previously it complained that that
   1.386 +    was a reference to a non-existent subpattern).
   1.387 +
   1.388 +6.  The erroneous patterns (?+-a) and (?-+a) give different error messages;
   1.389 +    this is right because (?- can be followed by option settings as well as by
   1.390 +    digits. I have, however, made the messages clearer.
   1.391 +
   1.392 +7.  Patterns such as (?(1)a|b) (a pattern that contains fewer subpatterns
   1.393 +    than the number used in the conditional) now cause a compile-time error.
   1.394 +    This is actually not compatible with Perl, which accepts such patterns, but
   1.395 +    treats the conditional as always being FALSE (as PCRE used to), but it
   1.396 +    seems to me that giving a diagnostic is better.
   1.397 +
   1.398 +8.  Change "alphameric" to the more common word "alphanumeric" in comments
   1.399 +    and messages.
   1.400 +
   1.401 +9.  Fix two occurrences of "backslash" in comments that should have been
   1.402 +    "backspace".
   1.403 +
   1.404 +10. Remove two redundant lines of code that can never be obeyed (their function
   1.405 +    was moved elsewhere).
   1.406 +
   1.407 +11. The program that makes PCRE's Unicode character property table had a bug
   1.408 +    which caused it to generate incorrect table entries for sequences of
   1.409 +    characters that have the same character type, but are in different scripts.
   1.410 +    It amalgamated them into a single range, with the script of the first of
   1.411 +    them. In other words, some characters were in the wrong script. There were
   1.412 +    thirteen such cases, affecting characters in the following ranges:
   1.413 +
   1.414 +      U+002b0 - U+002c1
   1.415 +      U+0060c - U+0060d
   1.416 +      U+0061e - U+00612
   1.417 +      U+0064b - U+0065e
   1.418 +      U+0074d - U+0076d
   1.419 +      U+01800 - U+01805
   1.420 +      U+01d00 - U+01d77
   1.421 +      U+01d9b - U+01dbf
   1.422 +      U+0200b - U+0200f
   1.423 +      U+030fc - U+030fe
   1.424 +      U+03260 - U+0327f
   1.425 +      U+0fb46 - U+0fbb1
   1.426 +      U+10450 - U+1049d
   1.427 +
   1.428 +12. The -o option (show only the matching part of a line) for pcregrep was not
   1.429 +    compatible with GNU grep in that, if there was more than one match in a
   1.430 +    line, it showed only the first of them. It now behaves in the same way as
   1.431 +    GNU grep.
   1.432 +
   1.433 +13. If the -o and -v options were combined for pcregrep, it printed a blank
   1.434 +    line for every non-matching line. GNU grep prints nothing, and pcregrep now
   1.435 +    does the same. The return code can be used to tell if there were any
   1.436 +    non-matching lines.
   1.437 +
   1.438 +14. Added --file-offsets and --line-offsets to pcregrep.
   1.439 +
   1.440 +15. The pattern (?=something)(?R) was not being diagnosed as a potentially
   1.441 +    infinitely looping recursion. The bug was that positive lookaheads were not
   1.442 +    being skipped when checking for a possible empty match (negative lookaheads
   1.443 +    and both kinds of lookbehind were skipped).
   1.444 +
   1.445 +16. Fixed two typos in the Windows-only code in pcregrep.c, and moved the
   1.446 +    inclusion of <windows.h> to before rather than after the definition of
   1.447 +    INVALID_FILE_ATTRIBUTES (patch from David Byron).
   1.448 +
   1.449 +17. Specifying a possessive quantifier with a specific limit for a Unicode
   1.450 +    character property caused pcre_compile() to compile bad code, which led at
   1.451 +    runtime to PCRE_ERROR_INTERNAL (-14). Examples of patterns that caused this
   1.452 +    are: /\p{Zl}{2,3}+/8 and /\p{Cc}{2}+/8. It was the possessive "+" that
   1.453 +    caused the error; without that there was no problem.
   1.454 +
   1.455 +18. Added --enable-pcregrep-libz and --enable-pcregrep-libbz2.
   1.456 +
   1.457 +19. Added --enable-pcretest-libreadline.
   1.458 +
   1.459 +20. In pcrecpp.cc, the variable 'count' was incremented twice in
   1.460 +    RE::GlobalReplace(). As a result, the number of replacements returned was
   1.461 +    double what it should be. I removed one of the increments, but Craig sent a
   1.462 +    later patch that removed the other one (the right fix) and added unit tests
   1.463 +    that check the return values (which was not done before).
   1.464 +
   1.465 +21. Several CMake things:
   1.466 +
   1.467 +    (1) Arranged that, when cmake is used on Unix, the libraries end up with
   1.468 +        the names libpcre and libpcreposix, not just pcre and pcreposix.
   1.469 +
   1.470 +    (2) The above change means that pcretest and pcregrep are now correctly
   1.471 +        linked with the newly-built libraries, not previously installed ones.
   1.472 +
   1.473 +    (3) Added PCRE_SUPPORT_LIBREADLINE, PCRE_SUPPORT_LIBZ, PCRE_SUPPORT_LIBBZ2.
   1.474 +
   1.475 +22. In UTF-8 mode, with newline set to "any", a pattern such as .*a.*=.b.*
   1.476 +    crashed when matching a string such as a\x{2029}b (note that \x{2029} is a
   1.477 +    UTF-8 newline character). The key issue is that the pattern starts .*;
   1.478 +    this means that the match must be either at the beginning, or after a
   1.479 +    newline. The bug was in the code for advancing after a failed match and
   1.480 +    checking that the new position followed a newline. It was not taking
   1.481 +    account of UTF-8 characters correctly.
   1.482 +
   1.483 +23. PCRE was behaving differently from Perl in the way it recognized POSIX
   1.484 +    character classes. PCRE was not treating the sequence [:...:] as a
   1.485 +    character class unless the ... were all letters. Perl, however, seems to
   1.486 +    allow any characters between [: and :], though of course it rejects as
   1.487 +    unknown any "names" that contain non-letters, because all the known class
   1.488 +    names consist only of letters. Thus, Perl gives an error for [[:1234:]],
   1.489 +    for example, whereas PCRE did not - it did not recognize a POSIX character
   1.490 +    class. This seemed a bit dangerous, so the code has been changed to be
   1.491 +    closer to Perl. The behaviour is not identical to Perl, because PCRE will
   1.492 +    diagnose an unknown class for, for example, [[:l\ower:]] where Perl will
   1.493 +    treat it as [[:lower:]]. However, PCRE does now give "unknown" errors where
   1.494 +    Perl does, and where it didn't before.
   1.495 +
   1.496 +24. Rewrite so as to remove the single use of %n from pcregrep because in some
   1.497 +    Windows environments %n is disabled by default.
   1.498 +
   1.499 +
   1.500 +Version 7.4 21-Sep-07
   1.501 +---------------------
   1.502 +
   1.503 +1.  Change 7.3/28 was implemented for classes by looking at the bitmap. This
   1.504 +    means that a class such as [\s] counted as "explicit reference to CR or
   1.505 +    LF". That isn't really right - the whole point of the change was to try to
   1.506 +    help when there was an actual mention of one of the two characters. So now
   1.507 +    the change happens only if \r or \n (or a literal CR or LF) character is
   1.508 +    encountered.
   1.509 +
   1.510 +2.  The 32-bit options word was also used for 6 internal flags, but the numbers
   1.511 +    of both had grown to the point where there were only 3 bits left.
   1.512 +    Fortunately, there was spare space in the data structure, and so I have
   1.513 +    moved the internal flags into a new 16-bit field to free up more option
   1.514 +    bits.
   1.515 +
   1.516 +3.  The appearance of (?J) at the start of a pattern set the DUPNAMES option,
   1.517 +    but did not set the internal JCHANGED flag - either of these is enough to
   1.518 +    control the way the "get" function works - but the PCRE_INFO_JCHANGED
   1.519 +    facility is supposed to tell if (?J) was ever used, so now (?J) at the
   1.520 +    start sets both bits.
   1.521 +
   1.522 +4.  Added options (at build time, compile time, exec time) to change \R from
   1.523 +    matching any Unicode line ending sequence to just matching CR, LF, or CRLF.
   1.524 +
   1.525 +5.  doc/pcresyntax.html was missing from the distribution.
   1.526 +
   1.527 +6.  Put back the definition of PCRE_ERROR_NULLWSLIMIT, for backward
   1.528 +    compatibility, even though it is no longer used.
   1.529 +
   1.530 +7.  Added macro for snprintf to pcrecpp_unittest.cc and also for strtoll and
   1.531 +    strtoull to pcrecpp.cc to select the available functions in WIN32 when the
   1.532 +    windows.h file is present (where different names are used). [This was
   1.533 +    reversed later after testing - see 16 below.]
   1.534 +
   1.535 +8.  Changed all #include <config.h> to #include "config.h". There were also
   1.536 +    some further <pcre.h> cases that I changed to "pcre.h".
   1.537 +
   1.538 +9.  When pcregrep was used with the --colour option, it missed the line ending
   1.539 +    sequence off the lines that it output.
   1.540 +
   1.541 +10. It was pointed out to me that arrays of string pointers cause lots of
   1.542 +    relocations when a shared library is dynamically loaded. A technique of
   1.543 +    using a single long string with a table of offsets can drastically reduce
   1.544 +    these. I have refactored PCRE in four places to do this. The result is
   1.545 +    dramatic:
   1.546 +
   1.547 +      Originally:                          290
   1.548 +      After changing UCP table:            187
   1.549 +      After changing error message table:   43
   1.550 +      After changing table of "verbs"       36
   1.551 +      After changing table of Posix names   22
   1.552 +
   1.553 +    Thanks to the folks working on Gregex for glib for this insight.
   1.554 +
   1.555 +11. --disable-stack-for-recursion caused compiling to fail unless -enable-
   1.556 +    unicode-properties was also set.
   1.557 +
   1.558 +12. Updated the tests so that they work when \R is defaulted to ANYCRLF.
   1.559 +
   1.560 +13. Added checks for ANY and ANYCRLF to pcrecpp.cc where it previously
   1.561 +    checked only for CRLF.
   1.562 +
   1.563 +14. Added casts to pcretest.c to avoid compiler warnings.
   1.564 +
   1.565 +15. Added Craig's patch to various pcrecpp modules to avoid compiler warnings.
   1.566 +
   1.567 +16. Added Craig's patch to remove the WINDOWS_H tests, that were not working,
   1.568 +    and instead check for _strtoi64 explicitly, and avoid the use of snprintf()
   1.569 +    entirely. This removes changes made in 7 above.
   1.570 +
   1.571 +17. The CMake files have been updated, and there is now more information about
   1.572 +    building with CMake in the NON-UNIX-USE document.
   1.573 +
   1.574 +
   1.575 +Version 7.3 28-Aug-07
   1.576 +---------------------
   1.577 +
   1.578 + 1. In the rejigging of the build system that eventually resulted in 7.1, the
   1.579 +    line "#include <pcre.h>" was included in pcre_internal.h. The use of angle
   1.580 +    brackets there is not right, since it causes compilers to look for an
   1.581 +    installed pcre.h, not the version that is in the source that is being
   1.582 +    compiled (which of course may be different). I have changed it back to:
   1.583 +
   1.584 +      #include "pcre.h"
   1.585 +
   1.586 +    I have a vague recollection that the change was concerned with compiling in
   1.587 +    different directories, but in the new build system, that is taken care of
   1.588 +    by the VPATH setting the Makefile.
   1.589 +
   1.590 + 2. The pattern .*$ when run in not-DOTALL UTF-8 mode with newline=any failed
   1.591 +    when the subject happened to end in the byte 0x85 (e.g. if the last
   1.592 +    character was \x{1ec5}). *Character* 0x85 is one of the "any" newline
   1.593 +    characters but of course it shouldn't be taken as a newline when it is part
   1.594 +    of another character. The bug was that, for an unlimited repeat of . in
   1.595 +    not-DOTALL UTF-8 mode, PCRE was advancing by bytes rather than by
   1.596 +    characters when looking for a newline.
   1.597 +
   1.598 + 3. A small performance improvement in the DOTALL UTF-8 mode .* case.
   1.599 +
   1.600 + 4. Debugging: adjusted the names of opcodes for different kinds of parentheses
   1.601 +    in debug output.
   1.602 +
   1.603 + 5. Arrange to use "%I64d" instead of "%lld" and "%I64u" instead of "%llu" for
   1.604 +    long printing in the pcrecpp unittest when running under MinGW.
   1.605 +
   1.606 + 6. ESC_K was left out of the EBCDIC table.
   1.607 +
   1.608 + 7. Change 7.0/38 introduced a new limit on the number of nested non-capturing
   1.609 +    parentheses; I made it 1000, which seemed large enough. Unfortunately, the
   1.610 +    limit also applies to "virtual nesting" when a pattern is recursive, and in
   1.611 +    this case 1000 isn't so big. I have been able to remove this limit at the
   1.612 +    expense of backing off one optimization in certain circumstances. Normally,
   1.613 +    when pcre_exec() would call its internal match() function recursively and
   1.614 +    immediately return the result unconditionally, it uses a "tail recursion"
   1.615 +    feature to save stack. However, when a subpattern that can match an empty
   1.616 +    string has an unlimited repetition quantifier, it no longer makes this
   1.617 +    optimization. That gives it a stack frame in which to save the data for
   1.618 +    checking that an empty string has been matched. Previously this was taken
   1.619 +    from the 1000-entry workspace that had been reserved. So now there is no
   1.620 +    explicit limit, but more stack is used.
   1.621 +
   1.622 + 8. Applied Daniel's patches to solve problems with the import/export magic
   1.623 +    syntax that is required for Windows, and which was going wrong for the
   1.624 +    pcreposix and pcrecpp parts of the library. These were overlooked when this
   1.625 +    problem was solved for the main library.
   1.626 +
   1.627 + 9. There were some crude static tests to avoid integer overflow when computing
   1.628 +    the size of patterns that contain repeated groups with explicit upper
   1.629 +    limits. As the maximum quantifier is 65535, the maximum group length was
   1.630 +    set at 30,000 so that the product of these two numbers did not overflow a
   1.631 +    32-bit integer. However, it turns out that people want to use groups that
   1.632 +    are longer than 30,000 bytes (though not repeat them that many times).
   1.633 +    Change 7.0/17 (the refactoring of the way the pattern size is computed) has
   1.634 +    made it possible to implement the integer overflow checks in a much more
   1.635 +    dynamic way, which I have now done. The artificial limitation on group
   1.636 +    length has been removed - we now have only the limit on the total length of
   1.637 +    the compiled pattern, which depends on the LINK_SIZE setting.
   1.638 +
   1.639 +10. Fixed a bug in the documentation for get/copy named substring when
   1.640 +    duplicate names are permitted. If none of the named substrings are set, the
   1.641 +    functions return PCRE_ERROR_NOSUBSTRING (7); the doc said they returned an
   1.642 +    empty string.
   1.643 +
   1.644 +11. Because Perl interprets \Q...\E at a high level, and ignores orphan \E
   1.645 +    instances, patterns such as [\Q\E] or [\E] or even [^\E] cause an error,
   1.646 +    because the ] is interpreted as the first data character and the
   1.647 +    terminating ] is not found. PCRE has been made compatible with Perl in this
   1.648 +    regard. Previously, it interpreted [\Q\E] as an empty class, and [\E] could
   1.649 +    cause memory overwriting.
   1.650 +
   1.651 +10. Like Perl, PCRE automatically breaks an unlimited repeat after an empty
   1.652 +    string has been matched (to stop an infinite loop). It was not recognizing
   1.653 +    a conditional subpattern that could match an empty string if that
   1.654 +    subpattern was within another subpattern. For example, it looped when
   1.655 +    trying to match  (((?(1)X|))*)  but it was OK with  ((?(1)X|)*)  where the
   1.656 +    condition was not nested. This bug has been fixed.
   1.657 +
   1.658 +12. A pattern like \X?\d or \P{L}?\d in non-UTF-8 mode could cause a backtrack
   1.659 +    past the start of the subject in the presence of bytes with the top bit
   1.660 +    set, for example "\x8aBCD".
   1.661 +
   1.662 +13. Added Perl 5.10 experimental backtracking controls (*FAIL), (*F), (*PRUNE),
   1.663 +    (*SKIP), (*THEN), (*COMMIT), and (*ACCEPT).
   1.664 +
   1.665 +14. Optimized (?!) to (*FAIL).
   1.666 +
   1.667 +15. Updated the test for a valid UTF-8 string to conform to the later RFC 3629.
   1.668 +    This restricts code points to be within the range 0 to 0x10FFFF, excluding
   1.669 +    the "low surrogate" sequence 0xD800 to 0xDFFF. Previously, PCRE allowed the
   1.670 +    full range 0 to 0x7FFFFFFF, as defined by RFC 2279. Internally, it still
   1.671 +    does: it's just the validity check that is more restrictive.
   1.672 +
   1.673 +16. Inserted checks for integer overflows during escape sequence (backslash)
   1.674 +    processing, and also fixed erroneous offset values for syntax errors during
   1.675 +    backslash processing.
   1.676 +
   1.677 +17. Fixed another case of looking too far back in non-UTF-8 mode (cf 12 above)
   1.678 +    for patterns like [\PPP\x8a]{1,}\x80 with the subject "A\x80".
   1.679 +
   1.680 +18. An unterminated class in a pattern like (?1)\c[ with a "forward reference"
   1.681 +    caused an overrun.
   1.682 +
   1.683 +19. A pattern like (?:[\PPa*]*){8,} which had an "extended class" (one with
   1.684 +    something other than just ASCII characters) inside a group that had an
   1.685 +    unlimited repeat caused a loop at compile time (while checking to see
   1.686 +    whether the group could match an empty string).
   1.687 +
   1.688 +20. Debugging a pattern containing \p or \P could cause a crash. For example,
   1.689 +    [\P{Any}] did so. (Error in the code for printing property names.)
   1.690 +
   1.691 +21. An orphan \E inside a character class could cause a crash.
   1.692 +
   1.693 +22. A repeated capturing bracket such as (A)? could cause a wild memory
   1.694 +    reference during compilation.
   1.695 +
   1.696 +23. There are several functions in pcre_compile() that scan along a compiled
   1.697 +    expression for various reasons (e.g. to see if it's fixed length for look
   1.698 +    behind). There were bugs in these functions when a repeated \p or \P was
   1.699 +    present in the pattern. These operators have additional parameters compared
   1.700 +    with \d, etc, and these were not being taken into account when moving along
   1.701 +    the compiled data. Specifically:
   1.702 +
   1.703 +    (a) A item such as \p{Yi}{3} in a lookbehind was not treated as fixed
   1.704 +        length.
   1.705 +
   1.706 +    (b) An item such as \pL+ within a repeated group could cause crashes or
   1.707 +        loops.
   1.708 +
   1.709 +    (c) A pattern such as \p{Yi}+(\P{Yi}+)(?1) could give an incorrect
   1.710 +        "reference to non-existent subpattern" error.
   1.711 +
   1.712 +    (d) A pattern like (\P{Yi}{2}\277)? could loop at compile time.
   1.713 +
   1.714 +24. A repeated \S or \W in UTF-8 mode could give wrong answers when multibyte
   1.715 +    characters were involved (for example /\S{2}/8g with "A\x{a3}BC").
   1.716 +
   1.717 +25. Using pcregrep in multiline, inverted mode (-Mv) caused it to loop.
   1.718 +
   1.719 +26. Patterns such as [\P{Yi}A] which include \p or \P and just one other
   1.720 +    character were causing crashes (broken optimization).
   1.721 +
   1.722 +27. Patterns such as (\P{Yi}*\277)* (group with possible zero repeat containing
   1.723 +    \p or \P) caused a compile-time loop.
   1.724 +
   1.725 +28. More problems have arisen in unanchored patterns when CRLF is a valid line
   1.726 +    break. For example, the unstudied pattern [\r\n]A does not match the string
   1.727 +    "\r\nA" because change 7.0/46 below moves the current point on by two
   1.728 +    characters after failing to match at the start. However, the pattern \nA
   1.729 +    *does* match, because it doesn't start till \n, and if [\r\n]A is studied,
   1.730 +    the same is true. There doesn't seem any very clean way out of this, but
   1.731 +    what I have chosen to do makes the common cases work: PCRE now takes note
   1.732 +    of whether there can be an explicit match for \r or \n anywhere in the
   1.733 +    pattern, and if so, 7.0/46 no longer applies. As part of this change,
   1.734 +    there's a new PCRE_INFO_HASCRORLF option for finding out whether a compiled
   1.735 +    pattern has explicit CR or LF references.
   1.736 +
   1.737 +29. Added (*CR) etc for changing newline setting at start of pattern.
   1.738 +
   1.739 +
   1.740 +Version 7.2 19-Jun-07
   1.741 +---------------------
   1.742 +
   1.743 + 1. If the fr_FR locale cannot be found for test 3, try the "french" locale,
   1.744 +    which is apparently normally available under Windows.
   1.745 +
   1.746 + 2. Re-jig the pcregrep tests with different newline settings in an attempt
   1.747 +    to make them independent of the local environment's newline setting.
   1.748 +
   1.749 + 3. Add code to configure.ac to remove -g from the CFLAGS default settings.
   1.750 +
   1.751 + 4. Some of the "internals" tests were previously cut out when the link size
   1.752 +    was not 2, because the output contained actual offsets. The recent new
   1.753 +    "Z" feature of pcretest means that these can be cut out, making the tests
   1.754 +    usable with all link sizes.
   1.755 +
   1.756 + 5. Implemented Stan Switzer's goto replacement for longjmp() when not using
   1.757 +    stack recursion. This gives a massive performance boost under BSD, but just
   1.758 +    a small improvement under Linux. However, it saves one field in the frame
   1.759 +    in all cases.
   1.760 +
   1.761 + 6. Added more features from the forthcoming Perl 5.10:
   1.762 +
   1.763 +    (a) (?-n) (where n is a string of digits) is a relative subroutine or
   1.764 +        recursion call. It refers to the nth most recently opened parentheses.
   1.765 +
   1.766 +    (b) (?+n) is also a relative subroutine call; it refers to the nth next
   1.767 +        to be opened parentheses.
   1.768 +
   1.769 +    (c) Conditions that refer to capturing parentheses can be specified
   1.770 +        relatively, for example, (?(-2)... or (?(+3)...
   1.771 +
   1.772 +    (d) \K resets the start of the current match so that everything before
   1.773 +        is not part of it.
   1.774 +
   1.775 +    (e) \k{name} is synonymous with \k<name> and \k'name' (.NET compatible).
   1.776 +
   1.777 +    (f) \g{name} is another synonym - part of Perl 5.10's unification of
   1.778 +        reference syntax.
   1.779 +
   1.780 +    (g) (?| introduces a group in which the numbering of parentheses in each
   1.781 +        alternative starts with the same number.
   1.782 +
   1.783 +    (h) \h, \H, \v, and \V match horizontal and vertical whitespace.
   1.784 +
   1.785 + 7. Added two new calls to pcre_fullinfo(): PCRE_INFO_OKPARTIAL and
   1.786 +    PCRE_INFO_JCHANGED.
   1.787 +
   1.788 + 8. A pattern such as  (.*(.)?)*  caused pcre_exec() to fail by either not
   1.789 +    terminating or by crashing. Diagnosed by Viktor Griph; it was in the code
   1.790 +    for detecting groups that can match an empty string.
   1.791 +
   1.792 + 9. A pattern with a very large number of alternatives (more than several
   1.793 +    hundred) was running out of internal workspace during the pre-compile
   1.794 +    phase, where pcre_compile() figures out how much memory will be needed. A
   1.795 +    bit of new cunning has reduced the workspace needed for groups with
   1.796 +    alternatives. The 1000-alternative test pattern now uses 12 bytes of
   1.797 +    workspace instead of running out of the 4096 that are available.
   1.798 +
   1.799 +10. Inserted some missing (unsigned int) casts to get rid of compiler warnings.
   1.800 +
   1.801 +11. Applied patch from Google to remove an optimization that didn't quite work.
   1.802 +    The report of the bug said:
   1.803 +
   1.804 +      pcrecpp::RE("a*").FullMatch("aaa") matches, while
   1.805 +      pcrecpp::RE("a*?").FullMatch("aaa") does not, and
   1.806 +      pcrecpp::RE("a*?\\z").FullMatch("aaa") does again.
   1.807 +
   1.808 +12. If \p or \P was used in non-UTF-8 mode on a character greater than 127
   1.809 +    it matched the wrong number of bytes.
   1.810 +
   1.811 +
   1.812 +Version 7.1 24-Apr-07
   1.813 +---------------------
   1.814 +
   1.815 + 1. Applied Bob Rossi and Daniel G's patches to convert the build system to one
   1.816 +    that is more "standard", making use of automake and other Autotools. There
   1.817 +    is some re-arrangement of the files and adjustment of comments consequent
   1.818 +    on this.
   1.819 +
   1.820 + 2. Part of the patch fixed a problem with the pcregrep tests. The test of -r
   1.821 +    for recursive directory scanning broke on some systems because the files
   1.822 +    are not scanned in any specific order and on different systems the order
   1.823 +    was different. A call to "sort" has been inserted into RunGrepTest for the
   1.824 +    approprate test as a short-term fix. In the longer term there may be an
   1.825 +    alternative.
   1.826 +
   1.827 + 3. I had an email from Eric Raymond about problems translating some of PCRE's
   1.828 +    man pages to HTML (despite the fact that I distribute HTML pages, some
   1.829 +    people do their own conversions for various reasons). The problems
   1.830 +    concerned the use of low-level troff macros .br and .in. I have therefore
   1.831 +    removed all such uses from the man pages (some were redundant, some could
   1.832 +    be replaced by .nf/.fi pairs). The 132html script that I use to generate
   1.833 +    HTML has been updated to handle .nf/.fi and to complain if it encounters
   1.834 +    .br or .in.
   1.835 +
   1.836 + 4. Updated comments in configure.ac that get placed in config.h.in and also
   1.837 +    arranged for config.h to be included in the distribution, with the name
   1.838 +    config.h.generic, for the benefit of those who have to compile without
   1.839 +    Autotools (compare pcre.h, which is now distributed as pcre.h.generic).
   1.840 +
   1.841 + 5. Updated the support (such as it is) for Virtual Pascal, thanks to Stefan
   1.842 +    Weber: (1) pcre_internal.h was missing some function renames; (2) updated
   1.843 +    makevp.bat for the current PCRE, using the additional files
   1.844 +    makevp_c.txt, makevp_l.txt, and pcregexp.pas.
   1.845 +
   1.846 + 6. A Windows user reported a minor discrepancy with test 2, which turned out
   1.847 +    to be caused by a trailing space on an input line that had got lost in his
   1.848 +    copy. The trailing space was an accident, so I've just removed it.
   1.849 +
   1.850 + 7. Add -Wl,-R... flags in pcre-config.in for *BSD* systems, as I'm told
   1.851 +    that is needed.
   1.852 +
   1.853 + 8. Mark ucp_table (in ucptable.h) and ucp_gentype (in pcre_ucp_searchfuncs.c)
   1.854 +    as "const" (a) because they are and (b) because it helps the PHP
   1.855 +    maintainers who have recently made a script to detect big data structures
   1.856 +    in the php code that should be moved to the .rodata section. I remembered
   1.857 +    to update Builducptable as well, so it won't revert if ucptable.h is ever
   1.858 +    re-created.
   1.859 +
   1.860 + 9. Added some extra #ifdef SUPPORT_UTF8 conditionals into pcretest.c,
   1.861 +    pcre_printint.src, pcre_compile.c, pcre_study.c, and pcre_tables.c, in
   1.862 +    order to be able to cut out the UTF-8 tables in the latter when UTF-8
   1.863 +    support is not required. This saves 1.5-2K of code, which is important in
   1.864 +    some applications.
   1.865 +
   1.866 +    Later: more #ifdefs are needed in pcre_ord2utf8.c and pcre_valid_utf8.c
   1.867 +    so as not to refer to the tables, even though these functions will never be
   1.868 +    called when UTF-8 support is disabled. Otherwise there are problems with a
   1.869 +    shared library.
   1.870 +
   1.871 +10. Fixed two bugs in the emulated memmove() function in pcre_internal.h:
   1.872 +
   1.873 +    (a) It was defining its arguments as char * instead of void *.
   1.874 +
   1.875 +    (b) It was assuming that all moves were upwards in memory; this was true
   1.876 +        a long time ago when I wrote it, but is no longer the case.
   1.877 +
   1.878 +    The emulated memove() is provided for those environments that have neither
   1.879 +    memmove() nor bcopy(). I didn't think anyone used it these days, but that
   1.880 +    is clearly not the case, as these two bugs were recently reported.
   1.881 +
   1.882 +11. The script PrepareRelease is now distributed: it calls 132html, CleanTxt,
   1.883 +    and Detrail to create the HTML documentation, the .txt form of the man
   1.884 +    pages, and it removes trailing spaces from listed files. It also creates
   1.885 +    pcre.h.generic and config.h.generic from pcre.h and config.h. In the latter
   1.886 +    case, it wraps all the #defines with #ifndefs. This script should be run
   1.887 +    before "make dist".
   1.888 +
   1.889 +12. Fixed two fairly obscure bugs concerned with quantified caseless matching
   1.890 +    with Unicode property support.
   1.891 +
   1.892 +    (a) For a maximizing quantifier, if the two different cases of the
   1.893 +        character were of different lengths in their UTF-8 codings (there are
   1.894 +        some cases like this - I found 11), and the matching function had to
   1.895 +        back up over a mixture of the two cases, it incorrectly assumed they
   1.896 +        were both the same length.
   1.897 +
   1.898 +    (b) When PCRE was configured to use the heap rather than the stack for
   1.899 +        recursion during matching, it was not correctly preserving the data for
   1.900 +        the other case of a UTF-8 character when checking ahead for a match
   1.901 +        while processing a minimizing repeat. If the check also involved
   1.902 +        matching a wide character, but failed, corruption could cause an
   1.903 +        erroneous result when trying to check for a repeat of the original
   1.904 +        character.
   1.905 +
   1.906 +13. Some tidying changes to the testing mechanism:
   1.907 +
   1.908 +    (a) The RunTest script now detects the internal link size and whether there
   1.909 +        is UTF-8 and UCP support by running ./pcretest -C instead of relying on
   1.910 +        values substituted by "configure". (The RunGrepTest script already did
   1.911 +        this for UTF-8.) The configure.ac script no longer substitutes the
   1.912 +        relevant variables.
   1.913 +
   1.914 +    (b) The debugging options /B and /D in pcretest show the compiled bytecode
   1.915 +        with length and offset values. This means that the output is different
   1.916 +        for different internal link sizes. Test 2 is skipped for link sizes
   1.917 +        other than 2 because of this, bypassing the problem. Unfortunately,
   1.918 +        there was also a test in test 3 (the locale tests) that used /B and
   1.919 +        failed for link sizes other than 2. Rather than cut the whole test out,
   1.920 +        I have added a new /Z option to pcretest that replaces the length and
   1.921 +        offset values with spaces. This is now used to make test 3 independent
   1.922 +        of link size. (Test 2 will be tidied up later.)
   1.923 +
   1.924 +14. If erroroffset was passed as NULL to pcre_compile, it provoked a
   1.925 +    segmentation fault instead of returning the appropriate error message.
   1.926 +
   1.927 +15. In multiline mode when the newline sequence was set to "any", the pattern
   1.928 +    ^$ would give a match between the \r and \n of a subject such as "A\r\nB".
   1.929 +    This doesn't seem right; it now treats the CRLF combination as the line
   1.930 +    ending, and so does not match in that case. It's only a pattern such as ^$
   1.931 +    that would hit this one: something like ^ABC$ would have failed after \r
   1.932 +    and then tried again after \r\n.
   1.933 +
   1.934 +16. Changed the comparison command for RunGrepTest from "diff -u" to "diff -ub"
   1.935 +    in an attempt to make files that differ only in their line terminators
   1.936 +    compare equal. This works on Linux.
   1.937 +
   1.938 +17. Under certain error circumstances pcregrep might try to free random memory
   1.939 +    as it exited. This is now fixed, thanks to valgrind.
   1.940 +
   1.941 +19. In pcretest, if the pattern /(?m)^$/g<any> was matched against the string
   1.942 +    "abc\r\n\r\n", it found an unwanted second match after the second \r. This
   1.943 +    was because its rules for how to advance for /g after matching an empty
   1.944 +    string at the end of a line did not allow for this case. They now check for
   1.945 +    it specially.
   1.946 +
   1.947 +20. pcretest is supposed to handle patterns and data of any length, by
   1.948 +    extending its buffers when necessary. It was getting this wrong when the
   1.949 +    buffer for a data line had to be extended.
   1.950 +
   1.951 +21. Added PCRE_NEWLINE_ANYCRLF which is like ANY, but matches only CR, LF, or
   1.952 +    CRLF as a newline sequence.
   1.953 +
   1.954 +22. Code for handling Unicode properties in pcre_dfa_exec() wasn't being cut
   1.955 +    out by #ifdef SUPPORT_UCP. This did no harm, as it could never be used, but
   1.956 +    I have nevertheless tidied it up.
   1.957 +
   1.958 +23. Added some casts to kill warnings from HP-UX ia64 compiler.
   1.959 +
   1.960 +24. Added a man page for pcre-config.
   1.961 +
   1.962 +
   1.963 +Version 7.0 19-Dec-06
   1.964 +---------------------
   1.965 +
   1.966 + 1. Fixed a signed/unsigned compiler warning in pcre_compile.c, shown up by
   1.967 +    moving to gcc 4.1.1.
   1.968 +
   1.969 + 2. The -S option for pcretest uses setrlimit(); I had omitted to #include
   1.970 +    sys/time.h, which is documented as needed for this function. It doesn't
   1.971 +    seem to matter on Linux, but it showed up on some releases of OS X.
   1.972 +
   1.973 + 3. It seems that there are systems where bytes whose values are greater than
   1.974 +    127 match isprint() in the "C" locale. The "C" locale should be the
   1.975 +    default when a C program starts up. In most systems, only ASCII printing
   1.976 +    characters match isprint(). This difference caused the output from pcretest
   1.977 +    to vary, making some of the tests fail. I have changed pcretest so that:
   1.978 +
   1.979 +    (a) When it is outputting text in the compiled version of a pattern, bytes
   1.980 +        other than 32-126 are always shown as hex escapes.
   1.981 +
   1.982 +    (b) When it is outputting text that is a matched part of a subject string,
   1.983 +        it does the same, unless a different locale has been set for the match
   1.984 +        (using the /L modifier). In this case, it uses isprint() to decide.
   1.985 +
   1.986 + 4. Fixed a major bug that caused incorrect computation of the amount of memory
   1.987 +    required for a compiled pattern when options that changed within the
   1.988 +    pattern affected the logic of the preliminary scan that determines the
   1.989 +    length. The relevant options are -x, and -i in UTF-8 mode. The result was
   1.990 +    that the computed length was too small. The symptoms of this bug were
   1.991 +    either the PCRE error "internal error: code overflow" from pcre_compile(),
   1.992 +    or a glibc crash with a message such as "pcretest: free(): invalid next
   1.993 +    size (fast)". Examples of patterns that provoked this bug (shown in
   1.994 +    pcretest format) are:
   1.995 +
   1.996 +      /(?-x: )/x
   1.997 +      /(?x)(?-x: \s*#\s*)/
   1.998 +      /((?i)[\x{c0}])/8
   1.999 +      /(?i:[\x{c0}])/8
  1.1000 +
  1.1001 +    HOWEVER: Change 17 below makes this fix obsolete as the memory computation
  1.1002 +    is now done differently.
  1.1003 +
  1.1004 + 5. Applied patches from Google to: (a) add a QuoteMeta function to the C++
  1.1005 +    wrapper classes; (b) implement a new function in the C++ scanner that is
  1.1006 +    more efficient than the old way of doing things because it avoids levels of
  1.1007 +    recursion in the regex matching; (c) add a paragraph to the documentation
  1.1008 +    for the FullMatch() function.
  1.1009 +
  1.1010 + 6. The escape sequence \n was being treated as whatever was defined as
  1.1011 +    "newline". Not only was this contrary to the documentation, which states
  1.1012 +    that \n is character 10 (hex 0A), but it also went horribly wrong when
  1.1013 +    "newline" was defined as CRLF. This has been fixed.
  1.1014 +
  1.1015 + 7. In pcre_dfa_exec.c the value of an unsigned integer (the variable called c)
  1.1016 +    was being set to -1 for the "end of line" case (supposedly a value that no
  1.1017 +    character can have). Though this value is never used (the check for end of
  1.1018 +    line is "zero bytes in current character"), it caused compiler complaints.
  1.1019 +    I've changed it to 0xffffffff.
  1.1020 +
  1.1021 + 8. In pcre_version.c, the version string was being built by a sequence of
  1.1022 +    C macros that, in the event of PCRE_PRERELEASE being defined as an empty
  1.1023 +    string (as it is for production releases) called a macro with an empty
  1.1024 +    argument. The C standard says the result of this is undefined. The gcc
  1.1025 +    compiler treats it as an empty string (which was what was wanted) but it is
  1.1026 +    reported that Visual C gives an error. The source has been hacked around to
  1.1027 +    avoid this problem.
  1.1028 +
  1.1029 + 9. On the advice of a Windows user, included <io.h> and <fcntl.h> in Windows
  1.1030 +    builds of pcretest, and changed the call to _setmode() to use _O_BINARY
  1.1031 +    instead of 0x8000. Made all the #ifdefs test both _WIN32 and WIN32 (not all
  1.1032 +    of them did).
  1.1033 +
  1.1034 +10. Originally, pcretest opened its input and output without "b"; then I was
  1.1035 +    told that "b" was needed in some environments, so it was added for release
  1.1036 +    5.0 to both the input and output. (It makes no difference on Unix-like
  1.1037 +    systems.) Later I was told that it is wrong for the input on Windows. I've
  1.1038 +    now abstracted the modes into two macros, to make it easier to fiddle with
  1.1039 +    them, and removed "b" from the input mode under Windows.
  1.1040 +
  1.1041 +11. Added pkgconfig support for the C++ wrapper library, libpcrecpp.
  1.1042 +
  1.1043 +12. Added -help and --help to pcretest as an official way of being reminded
  1.1044 +    of the options.
  1.1045 +
  1.1046 +13. Removed some redundant semicolons after macro calls in pcrecpparg.h.in
  1.1047 +    and pcrecpp.cc because they annoy compilers at high warning levels.
  1.1048 +
  1.1049 +14. A bit of tidying/refactoring in pcre_exec.c in the main bumpalong loop.
  1.1050 +
  1.1051 +15. Fixed an occurrence of == in configure.ac that should have been = (shell
  1.1052 +    scripts are not C programs :-) and which was not noticed because it works
  1.1053 +    on Linux.
  1.1054 +
  1.1055 +16. pcretest is supposed to handle any length of pattern and data line (as one
  1.1056 +    line or as a continued sequence of lines) by extending its input buffer if
  1.1057 +    necessary. This feature was broken for very long pattern lines, leading to
  1.1058 +    a string of junk being passed to pcre_compile() if the pattern was longer
  1.1059 +    than about 50K.
  1.1060 +
  1.1061 +17. I have done a major re-factoring of the way pcre_compile() computes the
  1.1062 +    amount of memory needed for a compiled pattern. Previously, there was code
  1.1063 +    that made a preliminary scan of the pattern in order to do this. That was
  1.1064 +    OK when PCRE was new, but as the facilities have expanded, it has become
  1.1065 +    harder and harder to keep it in step with the real compile phase, and there
  1.1066 +    have been a number of bugs (see for example, 4 above). I have now found a
  1.1067 +    cunning way of running the real compile function in a "fake" mode that
  1.1068 +    enables it to compute how much memory it would need, while actually only
  1.1069 +    ever using a few hundred bytes of working memory and without too many
  1.1070 +    tests of the mode. This should make future maintenance and development
  1.1071 +    easier. A side effect of this work is that the limit of 200 on the nesting
  1.1072 +    depth of parentheses has been removed (though this was never a serious
  1.1073 +    limitation, I suspect). However, there is a downside: pcre_compile() now
  1.1074 +    runs more slowly than before (30% or more, depending on the pattern). I
  1.1075 +    hope this isn't a big issue. There is no effect on runtime performance.
  1.1076 +
  1.1077 +18. Fixed a minor bug in pcretest: if a pattern line was not terminated by a
  1.1078 +    newline (only possible for the last line of a file) and it was a
  1.1079 +    pattern that set a locale (followed by /Lsomething), pcretest crashed.
  1.1080 +
  1.1081 +19. Added additional timing features to pcretest. (1) The -tm option now times
  1.1082 +    matching only, not compiling. (2) Both -t and -tm can be followed, as a
  1.1083 +    separate command line item, by a number that specifies the number of
  1.1084 +    repeats to use when timing. The default is 50000; this gives better
  1.1085 +    precision, but takes uncomfortably long for very large patterns.
  1.1086 +
  1.1087 +20. Extended pcre_study() to be more clever in cases where a branch of a
  1.1088 +    subpattern has no definite first character. For example, (a*|b*)[cd] would
  1.1089 +    previously give no result from pcre_study(). Now it recognizes that the
  1.1090 +    first character must be a, b, c, or d.
  1.1091 +
  1.1092 +21. There was an incorrect error "recursive call could loop indefinitely" if
  1.1093 +    a subpattern (or the entire pattern) that was being tested for matching an
  1.1094 +    empty string contained only one non-empty item after a nested subpattern.
  1.1095 +    For example, the pattern (?>\x{100}*)\d(?R) provoked this error
  1.1096 +    incorrectly, because the \d was being skipped in the check.
  1.1097 +
  1.1098 +22. The pcretest program now has a new pattern option /B and a command line
  1.1099 +    option -b, which is equivalent to adding /B to every pattern. This causes
  1.1100 +    it to show the compiled bytecode, without the additional information that
  1.1101 +    -d shows. The effect of -d is now the same as -b with -i (and similarly, /D
  1.1102 +    is the same as /B/I).
  1.1103 +
  1.1104 +23. A new optimization is now able automatically to treat some sequences such
  1.1105 +    as a*b as a*+b. More specifically, if something simple (such as a character
  1.1106 +    or a simple class like \d) has an unlimited quantifier, and is followed by
  1.1107 +    something that cannot possibly match the quantified thing, the quantifier
  1.1108 +    is automatically "possessified".
  1.1109 +
  1.1110 +24. A recursive reference to a subpattern whose number was greater than 39
  1.1111 +    went wrong under certain circumstances in UTF-8 mode. This bug could also
  1.1112 +    have affected the operation of pcre_study().
  1.1113 +
  1.1114 +25. Realized that a little bit of performance could be had by replacing
  1.1115 +    (c & 0xc0) == 0xc0 with c >= 0xc0 when processing UTF-8 characters.
  1.1116 +
  1.1117 +26. Timing data from pcretest is now shown to 4 decimal places instead of 3.
  1.1118 +
  1.1119 +27. Possessive quantifiers such as a++ were previously implemented by turning
  1.1120 +    them into atomic groups such as ($>a+). Now they have their own opcodes,
  1.1121 +    which improves performance. This includes the automatically created ones
  1.1122 +    from 23 above.
  1.1123 +
  1.1124 +28. A pattern such as (?=(\w+))\1: which simulates an atomic group using a
  1.1125 +    lookahead was broken if it was not anchored. PCRE was mistakenly expecting
  1.1126 +    the first matched character to be a colon. This applied both to named and
  1.1127 +    numbered groups.
  1.1128 +
  1.1129 +29. The ucpinternal.h header file was missing its idempotency #ifdef.
  1.1130 +
  1.1131 +30. I was sent a "project" file called libpcre.a.dev which I understand makes
  1.1132 +    building PCRE on Windows easier, so I have included it in the distribution.
  1.1133 +
  1.1134 +31. There is now a check in pcretest against a ridiculously large number being
  1.1135 +    returned by pcre_exec() or pcre_dfa_exec(). If this happens in a /g or /G
  1.1136 +    loop, the loop is abandoned.
  1.1137 +
  1.1138 +32. Forward references to subpatterns in conditions such as (?(2)...) where
  1.1139 +    subpattern 2 is defined later cause pcre_compile() to search forwards in
  1.1140 +    the pattern for the relevant set of parentheses. This search went wrong
  1.1141 +    when there were unescaped parentheses in a character class, parentheses
  1.1142 +    escaped with \Q...\E, or parentheses in a #-comment in /x mode.
  1.1143 +
  1.1144 +33. "Subroutine" calls and backreferences were previously restricted to
  1.1145 +    referencing subpatterns earlier in the regex. This restriction has now
  1.1146 +    been removed.
  1.1147 +
  1.1148 +34. Added a number of extra features that are going to be in Perl 5.10. On the
  1.1149 +    whole, these are just syntactic alternatives for features that PCRE had
  1.1150 +    previously implemented using the Python syntax or my own invention. The
  1.1151 +    other formats are all retained for compatibility.
  1.1152 +
  1.1153 +    (a) Named groups can now be defined as (?<name>...) or (?'name'...) as well
  1.1154 +        as (?P<name>...). The new forms, as well as being in Perl 5.10, are
  1.1155 +        also .NET compatible.
  1.1156 +
  1.1157 +    (b) A recursion or subroutine call to a named group can now be defined as
  1.1158 +        (?&name) as well as (?P>name).
  1.1159 +
  1.1160 +    (c) A backreference to a named group can now be defined as \k<name> or
  1.1161 +        \k'name' as well as (?P=name). The new forms, as well as being in Perl
  1.1162 +        5.10, are also .NET compatible.
  1.1163 +
  1.1164 +    (d) A conditional reference to a named group can now use the syntax
  1.1165 +        (?(<name>) or (?('name') as well as (?(name).
  1.1166 +
  1.1167 +    (e) A "conditional group" of the form (?(DEFINE)...) can be used to define
  1.1168 +        groups (named and numbered) that are never evaluated inline, but can be
  1.1169 +        called as "subroutines" from elsewhere. In effect, the DEFINE condition
  1.1170 +        is always false. There may be only one alternative in such a group.
  1.1171 +
  1.1172 +    (f) A test for recursion can be given as (?(R1).. or (?(R&name)... as well
  1.1173 +        as the simple (?(R). The condition is true only if the most recent
  1.1174 +        recursion is that of the given number or name. It does not search out
  1.1175 +        through the entire recursion stack.
  1.1176 +
  1.1177 +    (g) The escape \gN or \g{N} has been added, where N is a positive or
  1.1178 +        negative number, specifying an absolute or relative reference.
  1.1179 +
  1.1180 +35. Tidied to get rid of some further signed/unsigned compiler warnings and
  1.1181 +    some "unreachable code" warnings.
  1.1182 +
  1.1183 +36. Updated the Unicode property tables to Unicode version 5.0.0. Amongst other
  1.1184 +    things, this adds five new scripts.
  1.1185 +
  1.1186 +37. Perl ignores orphaned \E escapes completely. PCRE now does the same.
  1.1187 +    There were also incompatibilities regarding the handling of \Q..\E inside
  1.1188 +    character classes, for example with patterns like [\Qa\E-\Qz\E] where the
  1.1189 +    hyphen was adjacent to \Q or \E. I hope I've cleared all this up now.
  1.1190 +
  1.1191 +38. Like Perl, PCRE detects when an indefinitely repeated parenthesized group
  1.1192 +    matches an empty string, and forcibly breaks the loop. There were bugs in
  1.1193 +    this code in non-simple cases. For a pattern such as  ^(a()*)*  matched
  1.1194 +    against  aaaa  the result was just "a" rather than "aaaa", for example. Two
  1.1195 +    separate and independent bugs (that affected different cases) have been
  1.1196 +    fixed.
  1.1197 +
  1.1198 +39. Refactored the code to abolish the use of different opcodes for small
  1.1199 +    capturing bracket numbers. This is a tidy that I avoided doing when I
  1.1200 +    removed the limit on the number of capturing brackets for 3.5 back in 2001.
  1.1201 +    The new approach is not only tidier, it makes it possible to reduce the
  1.1202 +    memory needed to fix the previous bug (38).
  1.1203 +
  1.1204 +40. Implemented PCRE_NEWLINE_ANY to recognize any of the Unicode newline
  1.1205 +    sequences (http://unicode.org/unicode/reports/tr18/) as "newline" when
  1.1206 +    processing dot, circumflex, or dollar metacharacters, or #-comments in /x
  1.1207 +    mode.
  1.1208 +
  1.1209 +41. Add \R to match any Unicode newline sequence, as suggested in the Unicode
  1.1210 +    report.
  1.1211 +
  1.1212 +42. Applied patch, originally from Ari Pollak, modified by Google, to allow
  1.1213 +    copy construction and assignment in the C++ wrapper.
  1.1214 +
  1.1215 +43. Updated pcregrep to support "--newline=any". In the process, I fixed a
  1.1216 +    couple of bugs that could have given wrong results in the "--newline=crlf"
  1.1217 +    case.
  1.1218 +
  1.1219 +44. Added a number of casts and did some reorganization of signed/unsigned int
  1.1220 +    variables following suggestions from Dair Grant. Also renamed the variable
  1.1221 +    "this" as "item" because it is a C++ keyword.
  1.1222 +
  1.1223 +45. Arranged for dftables to add
  1.1224 +
  1.1225 +      #include "pcre_internal.h"
  1.1226 +
  1.1227 +    to pcre_chartables.c because without it, gcc 4.x may remove the array
  1.1228 +    definition from the final binary if PCRE is built into a static library and
  1.1229 +    dead code stripping is activated.
  1.1230 +
  1.1231 +46. For an unanchored pattern, if a match attempt fails at the start of a
  1.1232 +    newline sequence, and the newline setting is CRLF or ANY, and the next two
  1.1233 +    characters are CRLF, advance by two characters instead of one.
  1.1234 +
  1.1235 +
  1.1236 +Version 6.7 04-Jul-06
  1.1237 +---------------------
  1.1238 +
  1.1239 + 1. In order to handle tests when input lines are enormously long, pcretest has
  1.1240 +    been re-factored so that it automatically extends its buffers when
  1.1241 +    necessary. The code is crude, but this _is_ just a test program. The
  1.1242 +    default size has been increased from 32K to 50K.
  1.1243 +
  1.1244 + 2. The code in pcre_study() was using the value of the re argument before
  1.1245 +    testing it for NULL. (Of course, in any sensible call of the function, it
  1.1246 +    won't be NULL.)
  1.1247 +
  1.1248 + 3. The memmove() emulation function in pcre_internal.h, which is used on
  1.1249 +    systems that lack both memmove() and bcopy() - that is, hardly ever -
  1.1250 +    was missing a "static" storage class specifier.
  1.1251 +
  1.1252 + 4. When UTF-8 mode was not set, PCRE looped when compiling certain patterns
  1.1253 +    containing an extended class (one that cannot be represented by a bitmap
  1.1254 +    because it contains high-valued characters or Unicode property items, e.g.
  1.1255 +    [\pZ]). Almost always one would set UTF-8 mode when processing such a
  1.1256 +    pattern, but PCRE should not loop if you do not (it no longer does).
  1.1257 +    [Detail: two cases were found: (a) a repeated subpattern containing an
  1.1258 +    extended class; (b) a recursive reference to a subpattern that followed a
  1.1259 +    previous extended class. It wasn't skipping over the extended class
  1.1260 +    correctly when UTF-8 mode was not set.]
  1.1261 +
  1.1262 + 5. A negated single-character class was not being recognized as fixed-length
  1.1263 +    in lookbehind assertions such as (?<=[^f]), leading to an incorrect
  1.1264 +    compile error "lookbehind assertion is not fixed length".
  1.1265 +
  1.1266 + 6. The RunPerlTest auxiliary script was showing an unexpected difference
  1.1267 +    between PCRE and Perl for UTF-8 tests. It turns out that it is hard to
  1.1268 +    write a Perl script that can interpret lines of an input file either as
  1.1269 +    byte characters or as UTF-8, which is what "perltest" was being required to
  1.1270 +    do for the non-UTF-8 and UTF-8 tests, respectively. Essentially what you
  1.1271 +    can't do is switch easily at run time between having the "use utf8;" pragma
  1.1272 +    or not. In the end, I fudged it by using the RunPerlTest script to insert
  1.1273 +    "use utf8;" explicitly for the UTF-8 tests.
  1.1274 +
  1.1275 + 7. In multiline (/m) mode, PCRE was matching ^ after a terminating newline at
  1.1276 +    the end of the subject string, contrary to the documentation and to what
  1.1277 +    Perl does. This was true of both matching functions. Now it matches only at
  1.1278 +    the start of the subject and immediately after *internal* newlines.
  1.1279 +
  1.1280 + 8. A call of pcre_fullinfo() from pcretest to get the option bits was passing
  1.1281 +    a pointer to an int instead of a pointer to an unsigned long int. This
  1.1282 +    caused problems on 64-bit systems.
  1.1283 +
  1.1284 + 9. Applied a patch from the folks at Google to pcrecpp.cc, to fix "another
  1.1285 +    instance of the 'standard' template library not being so standard".
  1.1286 +
  1.1287 +10. There was no check on the number of named subpatterns nor the maximum
  1.1288 +    length of a subpattern name. The product of these values is used to compute
  1.1289 +    the size of the memory block for a compiled pattern. By supplying a very
  1.1290 +    long subpattern name and a large number of named subpatterns, the size
  1.1291 +    computation could be caused to overflow. This is now prevented by limiting
  1.1292 +    the length of names to 32 characters, and the number of named subpatterns
  1.1293 +    to 10,000.
  1.1294 +
  1.1295 +11. Subpatterns that are repeated with specific counts have to be replicated in
  1.1296 +    the compiled pattern. The size of memory for this was computed from the
  1.1297 +    length of the subpattern and the repeat count. The latter is limited to
  1.1298 +    65535, but there was no limit on the former, meaning that integer overflow
  1.1299 +    could in principle occur. The compiled length of a repeated subpattern is
  1.1300 +    now limited to 30,000 bytes in order to prevent this.
  1.1301 +
  1.1302 +12. Added the optional facility to have named substrings with the same name.
  1.1303 +
  1.1304 +13. Added the ability to use a named substring as a condition, using the
  1.1305 +    Python syntax: (?(name)yes|no). This overloads (?(R)... and names that
  1.1306 +    are numbers (not recommended). Forward references are permitted.
  1.1307 +
  1.1308 +14. Added forward references in named backreferences (if you see what I mean).
  1.1309 +
  1.1310 +15. In UTF-8 mode, with the PCRE_DOTALL option set, a quantified dot in the
  1.1311 +    pattern could run off the end of the subject. For example, the pattern
  1.1312 +    "(?s)(.{1,5})"8 did this with the subject "ab".
  1.1313 +
  1.1314 +16. If PCRE_DOTALL or PCRE_MULTILINE were set, pcre_dfa_exec() behaved as if
  1.1315 +    PCRE_CASELESS was set when matching characters that were quantified with ?
  1.1316 +    or *.
  1.1317 +
  1.1318 +17. A character class other than a single negated character that had a minimum
  1.1319 +    but no maximum quantifier - for example [ab]{6,} - was not handled
  1.1320 +    correctly by pce_dfa_exec(). It would match only one character.
  1.1321 +
  1.1322 +18. A valid (though odd) pattern that looked like a POSIX character
  1.1323 +    class but used an invalid character after [ (for example [[,abc,]]) caused
  1.1324 +    pcre_compile() to give the error "Failed: internal error: code overflow" or
  1.1325 +    in some cases to crash with a glibc free() error. This could even happen if
  1.1326 +    the pattern terminated after [[ but there just happened to be a sequence of
  1.1327 +    letters, a binary zero, and a closing ] in the memory that followed.
  1.1328 +
  1.1329 +19. Perl's treatment of octal escapes in the range \400 to \777 has changed
  1.1330 +    over the years. Originally (before any Unicode support), just the bottom 8
  1.1331 +    bits were taken. Thus, for example, \500 really meant \100. Nowadays the
  1.1332 +    output from "man perlunicode" includes this:
  1.1333 +
  1.1334 +      The regular expression compiler produces polymorphic opcodes.  That
  1.1335 +      is, the pattern adapts to the data and automatically switches to
  1.1336 +      the Unicode character scheme when presented with Unicode data--or
  1.1337 +      instead uses a traditional byte scheme when presented with byte
  1.1338 +      data.
  1.1339 +
  1.1340 +    Sadly, a wide octal escape does not cause a switch, and in a string with
  1.1341 +    no other multibyte characters, these octal escapes are treated as before.
  1.1342 +    Thus, in Perl, the pattern  /\500/ actually matches \100 but the pattern
  1.1343 +    /\500|\x{1ff}/ matches \500 or \777 because the whole thing is treated as a
  1.1344 +    Unicode string.
  1.1345 +
  1.1346 +    I have not perpetrated such confusion in PCRE. Up till now, it took just
  1.1347 +    the bottom 8 bits, as in old Perl. I have now made octal escapes with
  1.1348 +    values greater than \377 illegal in non-UTF-8 mode. In UTF-8 mode they
  1.1349 +    translate to the appropriate multibyte character.
  1.1350 +
  1.1351 +29. Applied some refactoring to reduce the number of warnings from Microsoft
  1.1352 +    and Borland compilers. This has included removing the fudge introduced
  1.1353 +    seven years ago for the OS/2 compiler (see 2.02/2 below) because it caused
  1.1354 +    a warning about an unused variable.
  1.1355 +
  1.1356 +21. PCRE has not included VT (character 0x0b) in the set of whitespace
  1.1357 +    characters since release 4.0, because Perl (from release 5.004) does not.
  1.1358 +    [Or at least, is documented not to: some releases seem to be in conflict
  1.1359 +    with the documentation.] However, when a pattern was studied with
  1.1360 +    pcre_study() and all its branches started with \s, PCRE still included VT
  1.1361 +    as a possible starting character. Of course, this did no harm; it just
  1.1362 +    caused an unnecessary match attempt.
  1.1363 +
  1.1364 +22. Removed a now-redundant internal flag bit that recorded the fact that case
  1.1365 +    dependency changed within the pattern. This was once needed for "required
  1.1366 +    byte" processing, but is no longer used. This recovers a now-scarce options
  1.1367 +    bit. Also moved the least significant internal flag bit to the most-
  1.1368 +    significant bit of the word, which was not previously used (hangover from
  1.1369 +    the days when it was an int rather than a uint) to free up another bit for
  1.1370 +    the future.
  1.1371 +
  1.1372 +23. Added support for CRLF line endings as well as CR and LF. As well as the
  1.1373 +    default being selectable at build time, it can now be changed at runtime
  1.1374 +    via the PCRE_NEWLINE_xxx flags. There are now options for pcregrep to
  1.1375 +    specify that it is scanning data with non-default line endings.
  1.1376 +
  1.1377 +24. Changed the definition of CXXLINK to make it agree with the definition of
  1.1378 +    LINK in the Makefile, by replacing LDFLAGS to CXXFLAGS.
  1.1379 +
  1.1380 +25. Applied Ian Taylor's patches to avoid using another stack frame for tail
  1.1381 +    recursions. This makes a big different to stack usage for some patterns.
  1.1382 +
  1.1383 +26. If a subpattern containing a named recursion or subroutine reference such
  1.1384 +    as (?P>B) was quantified, for example (xxx(?P>B)){3}, the calculation of
  1.1385 +    the space required for the compiled pattern went wrong and gave too small a
  1.1386 +    value. Depending on the environment, this could lead to "Failed: internal
  1.1387 +    error: code overflow at offset 49" or "glibc detected double free or
  1.1388 +    corruption" errors.
  1.1389 +
  1.1390 +27. Applied patches from Google (a) to support the new newline modes and (b) to
  1.1391 +    advance over multibyte UTF-8 characters in GlobalReplace.
  1.1392 +
  1.1393 +28. Change free() to pcre_free() in pcredemo.c. Apparently this makes a
  1.1394 +    difference for some implementation of PCRE in some Windows version.
  1.1395 +
  1.1396 +29. Added some extra testing facilities to pcretest:
  1.1397 +
  1.1398 +    \q<number>   in a data line sets the "match limit" value
  1.1399 +    \Q<number>   in a data line sets the "match recursion limt" value
  1.1400 +    -S <number>  sets the stack size, where <number> is in megabytes
  1.1401 +
  1.1402 +    The -S option isn't available for Windows.
  1.1403 +
  1.1404 +
  1.1405 +Version 6.6 06-Feb-06
  1.1406 +---------------------
  1.1407 +
  1.1408 + 1. Change 16(a) for 6.5 broke things, because PCRE_DATA_SCOPE was not defined
  1.1409 +    in pcreposix.h. I have copied the definition from pcre.h.
  1.1410 +
  1.1411 + 2. Change 25 for 6.5 broke compilation in a build directory out-of-tree
  1.1412 +    because pcre.h is no longer a built file.
  1.1413 +
  1.1414 + 3. Added Jeff Friedl's additional debugging patches to pcregrep. These are
  1.1415 +    not normally included in the compiled code.
  1.1416 +
  1.1417 +
  1.1418 +Version 6.5 01-Feb-06
  1.1419 +---------------------
  1.1420 +
  1.1421 + 1. When using the partial match feature with pcre_dfa_exec(), it was not
  1.1422 +    anchoring the second and subsequent partial matches at the new starting
  1.1423 +    point. This could lead to incorrect results. For example, with the pattern
  1.1424 +    /1234/, partially matching against "123" and then "a4" gave a match.
  1.1425 +
  1.1426 + 2. Changes to pcregrep:
  1.1427 +
  1.1428 +    (a) All non-match returns from pcre_exec() were being treated as failures
  1.1429 +        to match the line. Now, unless the error is PCRE_ERROR_NOMATCH, an
  1.1430 +        error message is output. Some extra information is given for the
  1.1431 +        PCRE_ERROR_MATCHLIMIT and PCRE_ERROR_RECURSIONLIMIT errors, which are
  1.1432 +        probably the only errors that are likely to be caused by users (by
  1.1433 +        specifying a regex that has nested indefinite repeats, for instance).
  1.1434 +        If there are more than 20 of these errors, pcregrep is abandoned.
  1.1435 +
  1.1436 +    (b) A binary zero was treated as data while matching, but terminated the
  1.1437 +        output line if it was written out. This has been fixed: binary zeroes
  1.1438 +        are now no different to any other data bytes.
  1.1439 +
  1.1440 +    (c) Whichever of the LC_ALL or LC_CTYPE environment variables is set is
  1.1441 +        used to set a locale for matching. The --locale=xxxx long option has
  1.1442 +        been added (no short equivalent) to specify a locale explicitly on the
  1.1443 +        pcregrep command, overriding the environment variables.
  1.1444 +
  1.1445 +    (d) When -B was used with -n, some line numbers in the output were one less
  1.1446 +        than they should have been.
  1.1447 +
  1.1448 +    (e) Added the -o (--only-matching) option.
  1.1449 +
  1.1450 +    (f) If -A or -C was used with -c (count only), some lines of context were
  1.1451 +        accidentally printed for the final match.
  1.1452 +
  1.1453 +    (g) Added the -H (--with-filename) option.
  1.1454 +
  1.1455 +    (h) The combination of options -rh failed to suppress file names for files
  1.1456 +        that were found from directory arguments.
  1.1457 +
  1.1458 +    (i) Added the -D (--devices) and -d (--directories) options.
  1.1459 +
  1.1460 +    (j) Added the -F (--fixed-strings) option.
  1.1461 +
  1.1462 +    (k) Allow "-" to be used as a file name for -f as well as for a data file.
  1.1463 +
  1.1464 +    (l) Added the --colo(u)r option.
  1.1465 +
  1.1466 +    (m) Added Jeffrey Friedl's -S testing option, but within #ifdefs so that it
  1.1467 +        is not present by default.
  1.1468 +
  1.1469 + 3. A nasty bug was discovered in the handling of recursive patterns, that is,
  1.1470 +    items such as (?R) or (?1), when the recursion could match a number of
  1.1471 +    alternatives. If it matched one of the alternatives, but subsequently,
  1.1472 +    outside the recursion, there was a failure, the code tried to back up into
  1.1473 +    the recursion. However, because of the way PCRE is implemented, this is not
  1.1474 +    possible, and the result was an incorrect result from the match.
  1.1475 +
  1.1476 +    In order to prevent this happening, the specification of recursion has
  1.1477 +    been changed so that all such subpatterns are automatically treated as
  1.1478 +    atomic groups. Thus, for example, (?R) is treated as if it were (?>(?R)).
  1.1479 +
  1.1480 + 4. I had overlooked the fact that, in some locales, there are characters for
  1.1481 +    which isalpha() is true but neither isupper() nor islower() are true. In
  1.1482 +    the fr_FR locale, for instance, the \xAA and \xBA characters (ordmasculine
  1.1483 +    and ordfeminine) are like this. This affected the treatment of \w and \W
  1.1484 +    when they appeared in character classes, but not when they appeared outside
  1.1485 +    a character class. The bit map for "word" characters is now created
  1.1486 +    separately from the results of isalnum() instead of just taking it from the
  1.1487 +    upper, lower, and digit maps. (Plus the underscore character, of course.)
  1.1488 +
  1.1489 + 5. The above bug also affected the handling of POSIX character classes such as
  1.1490 +    [[:alpha:]] and [[:alnum:]]. These do not have their own bit maps in PCRE's
  1.1491 +    permanent tables. Instead, the bit maps for such a class were previously
  1.1492 +    created as the appropriate unions of the upper, lower, and digit bitmaps.
  1.1493 +    Now they are created by subtraction from the [[:word:]] class, which has
  1.1494 +    its own bitmap.
  1.1495 +
  1.1496 + 6. The [[:blank:]] character class matches horizontal, but not vertical space.
  1.1497 +    It is created by subtracting the vertical space characters (\x09, \x0a,
  1.1498 +    \x0b, \x0c) from the [[:space:]] bitmap. Previously, however, the
  1.1499 +    subtraction was done in the overall bitmap for a character class, meaning
  1.1500 +    that a class such as [\x0c[:blank:]] was incorrect because \x0c would not
  1.1501 +    be recognized. This bug has been fixed.
  1.1502 +
  1.1503 + 7. Patches from the folks at Google:
  1.1504 +
  1.1505 +      (a) pcrecpp.cc: "to handle a corner case that may or may not happen in
  1.1506 +      real life, but is still worth protecting against".
  1.1507 +
  1.1508 +      (b) pcrecpp.cc: "corrects a bug when negative radixes are used with
  1.1509 +      regular expressions".
  1.1510 +
  1.1511 +      (c) pcre_scanner.cc: avoid use of std::count() because not all systems
  1.1512 +      have it.
  1.1513 +
  1.1514 +      (d) Split off pcrecpparg.h from pcrecpp.h and had the former built by
  1.1515 +      "configure" and the latter not, in order to fix a problem somebody had
  1.1516 +      with compiling the Arg class on HP-UX.
  1.1517 +
  1.1518 +      (e) Improve the error-handling of the C++ wrapper a little bit.
  1.1519 +
  1.1520 +      (f) New tests for checking recursion limiting.
  1.1521 +
  1.1522 + 8. The pcre_memmove() function, which is used only if the environment does not
  1.1523 +    have a standard memmove() function (and is therefore rarely compiled),
  1.1524 +    contained two bugs: (a) use of int instead of size_t, and (b) it was not
  1.1525 +    returning a result (though PCRE never actually uses the result).
  1.1526 +
  1.1527 + 9. In the POSIX regexec() interface, if nmatch is specified as a ridiculously
  1.1528 +    large number - greater than INT_MAX/(3*sizeof(int)) - REG_ESPACE is
  1.1529 +    returned instead of calling malloc() with an overflowing number that would
  1.1530 +    most likely cause subsequent chaos.
  1.1531 +
  1.1532 +10. The debugging option of pcretest was not showing the NO_AUTO_CAPTURE flag.
  1.1533 +
  1.1534 +11. The POSIX flag REG_NOSUB is now supported. When a pattern that was compiled
  1.1535 +    with this option is matched, the nmatch and pmatch options of regexec() are
  1.1536 +    ignored.
  1.1537 +
  1.1538 +12. Added REG_UTF8 to the POSIX interface. This is not defined by POSIX, but is
  1.1539 +    provided in case anyone wants to the the POSIX interface with UTF-8
  1.1540 +    strings.
  1.1541 +
  1.1542 +13. Added CXXLDFLAGS to the Makefile parameters to provide settings only on the
  1.1543 +    C++ linking (needed for some HP-UX environments).
  1.1544 +
  1.1545 +14. Avoid compiler warnings in get_ucpname() when compiled without UCP support
  1.1546 +    (unused parameter) and in the pcre_printint() function (omitted "default"
  1.1547 +    switch label when the default is to do nothing).
  1.1548 +
  1.1549 +15. Added some code to make it possible, when PCRE is compiled as a C++
  1.1550 +    library, to replace subject pointers for pcre_exec() with a smart pointer
  1.1551 +    class, thus making it possible to process discontinuous strings.
  1.1552 +
  1.1553 +16. The two macros PCRE_EXPORT and PCRE_DATA_SCOPE are confusing, and perform
  1.1554 +    much the same function. They were added by different people who were trying
  1.1555 +    to make PCRE easy to compile on non-Unix systems. It has been suggested
  1.1556 +    that PCRE_EXPORT be abolished now that there is more automatic apparatus
  1.1557 +    for compiling on Windows systems. I have therefore replaced it with
  1.1558 +    PCRE_DATA_SCOPE. This is set automatically for Windows; if not set it
  1.1559 +    defaults to "extern" for C or "extern C" for C++, which works fine on
  1.1560 +    Unix-like systems. It is now possible to override the value of PCRE_DATA_
  1.1561 +    SCOPE with something explicit in config.h. In addition:
  1.1562 +
  1.1563 +    (a) pcreposix.h still had just "extern" instead of either of these macros;
  1.1564 +        I have replaced it with PCRE_DATA_SCOPE.
  1.1565 +
  1.1566 +    (b) Functions such as _pcre_xclass(), which are internal to the library,
  1.1567 +        but external in the C sense, all had PCRE_EXPORT in their definitions.
  1.1568 +        This is apparently wrong for the Windows case, so I have removed it.
  1.1569 +        (It makes no difference on Unix-like systems.)
  1.1570 +
  1.1571 +17. Added a new limit, MATCH_LIMIT_RECURSION, which limits the depth of nesting
  1.1572 +    of recursive calls to match(). This is different to MATCH_LIMIT because
  1.1573 +    that limits the total number of calls to match(), not all of which increase
  1.1574 +    the depth of recursion. Limiting the recursion depth limits the amount of
  1.1575 +    stack (or heap if NO_RECURSE is set) that is used. The default can be set
  1.1576 +    when PCRE is compiled, and changed at run time. A patch from Google adds
  1.1577 +    this functionality to the C++ interface.
  1.1578 +
  1.1579 +18. Changes to the handling of Unicode character properties:
  1.1580 +
  1.1581 +    (a) Updated the table to Unicode 4.1.0.
  1.1582 +
  1.1583 +    (b) Recognize characters that are not in the table as "Cn" (undefined).
  1.1584 +
  1.1585 +    (c) I revised the way the table is implemented to a much improved format
  1.1586 +        which includes recognition of ranges. It now supports the ranges that
  1.1587 +        are defined in UnicodeData.txt, and it also amalgamates other
  1.1588 +        characters into ranges. This has reduced the number of entries in the
  1.1589 +        table from around 16,000 to around 3,000, thus reducing its size
  1.1590 +        considerably. I realized I did not need to use a tree structure after
  1.1591 +        all - a binary chop search is just as efficient. Having reduced the
  1.1592 +        number of entries, I extended their size from 6 bytes to 8 bytes to
  1.1593 +        allow for more data.
  1.1594 +
  1.1595 +    (d) Added support for Unicode script names via properties such as \p{Han}.
  1.1596 +
  1.1597 +19. In UTF-8 mode, a backslash followed by a non-Ascii character was not
  1.1598 +    matching that character.
  1.1599 +
  1.1600 +20. When matching a repeated Unicode property with a minimum greater than zero,
  1.1601 +    (for example \pL{2,}), PCRE could look past the end of the subject if it
  1.1602 +    reached it while seeking the minimum number of characters. This could
  1.1603 +    happen only if some of the characters were more than one byte long, because
  1.1604 +    there is a check for at least the minimum number of bytes.
  1.1605 +
  1.1606 +21. Refactored the implementation of \p and \P so as to be more general, to
  1.1607 +    allow for more different types of property in future. This has changed the
  1.1608 +    compiled form incompatibly. Anybody with saved compiled patterns that use
  1.1609 +    \p or \P will have to recompile them.
  1.1610 +
  1.1611 +22. Added "Any" and "L&" to the supported property types.
  1.1612 +
  1.1613 +23. Recognize \x{...} as a code point specifier, even when not in UTF-8 mode,
  1.1614 +    but give a compile time error if the value is greater than 0xff.
  1.1615 +
  1.1616 +24. The man pages for pcrepartial, pcreprecompile, and pcre_compile2 were
  1.1617 +    accidentally not being installed or uninstalled.
  1.1618 +
  1.1619 +25. The pcre.h file was built from pcre.h.in, but the only changes that were
  1.1620 +    made were to insert the current release number. This seemed silly, because
  1.1621 +    it made things harder for people building PCRE on systems that don't run
  1.1622 +    "configure". I have turned pcre.h into a distributed file, no longer built
  1.1623 +    by "configure", with the version identification directly included. There is
  1.1624 +    no longer a pcre.h.in file.
  1.1625 +
  1.1626 +    However, this change necessitated a change to the pcre-config script as
  1.1627 +    well. It is built from pcre-config.in, and one of the substitutions was the
  1.1628 +    release number. I have updated configure.ac so that ./configure now finds
  1.1629 +    the release number by grepping pcre.h.
  1.1630 +
  1.1631 +26. Added the ability to run the tests under valgrind.
  1.1632 +
  1.1633 +
  1.1634 +Version 6.4 05-Sep-05
  1.1635 +---------------------
  1.1636 +
  1.1637 + 1. Change 6.0/10/(l) to pcregrep introduced a bug that caused separator lines
  1.1638 +    "--" to be printed when multiple files were scanned, even when none of the
  1.1639 +    -A, -B, or -C options were used. This is not compatible with Gnu grep, so I
  1.1640 +    consider it to be a bug, and have restored the previous behaviour.
  1.1641 +
  1.1642 + 2. A couple of code tidies to get rid of compiler warnings.
  1.1643 +
  1.1644 + 3. The pcretest program used to cheat by referring to symbols in the library
  1.1645 +    whose names begin with _pcre_. These are internal symbols that are not
  1.1646 +    really supposed to be visible externally, and in some environments it is
  1.1647 +    possible to suppress them. The cheating is now confined to including
  1.1648 +    certain files from the library's source, which is a bit cleaner.
  1.1649 +
  1.1650 + 4. Renamed pcre.in as pcre.h.in to go with pcrecpp.h.in; it also makes the
  1.1651 +    file's purpose clearer.
  1.1652 +
  1.1653 + 5. Reorganized pcre_ucp_findchar().
  1.1654 +
  1.1655 +
  1.1656 +Version 6.3 15-Aug-05
  1.1657 +---------------------
  1.1658 +
  1.1659 + 1. The file libpcre.pc.in did not have general read permission in the tarball.
  1.1660 +
  1.1661 + 2. There were some problems when building without C++ support:
  1.1662 +
  1.1663 +    (a) If C++ support was not built, "make install" and "make test" still
  1.1664 +        tried to test it.
  1.1665 +
  1.1666 +    (b) There were problems when the value of CXX was explicitly set. Some
  1.1667 +        changes have been made to try to fix these, and ...
  1.1668 +
  1.1669 +    (c) --disable-cpp can now be used to explicitly disable C++ support.
  1.1670 +
  1.1671 +    (d) The use of @CPP_OBJ@ directly caused a blank line preceded by a
  1.1672 +        backslash in a target when C++ was disabled. This confuses some
  1.1673 +        versions of "make", apparently. Using an intermediate variable solves
  1.1674 +        this. (Same for CPP_LOBJ.)
  1.1675 +
  1.1676 + 3. $(LINK_FOR_BUILD) now includes $(CFLAGS_FOR_BUILD) and $(LINK)
  1.1677 +    (non-Windows) now includes $(CFLAGS) because these flags are sometimes
  1.1678 +    necessary on certain architectures.
  1.1679 +
  1.1680 + 4. Added a setting of -export-symbols-regex to the link command to remove
  1.1681 +    those symbols that are exported in the C sense, but actually are local
  1.1682 +    within the library, and not documented. Their names all begin with
  1.1683 +    "_pcre_". This is not a perfect job, because (a) we have to except some
  1.1684 +    symbols that pcretest ("illegally") uses, and (b) the facility isn't always
  1.1685 +    available (and never for static libraries). I have made a note to try to
  1.1686 +    find a way round (a) in the future.
  1.1687 +
  1.1688 +
  1.1689 +Version 6.2 01-Aug-05
  1.1690 +---------------------
  1.1691 +
  1.1692 + 1. There was no test for integer overflow of quantifier values. A construction
  1.1693 +    such as {1111111111111111} would give undefined results. What is worse, if
  1.1694 +    a minimum quantifier for a parenthesized subpattern overflowed and became
  1.1695 +    negative, the calculation of the memory size went wrong. This could have
  1.1696 +    led to memory overwriting.
  1.1697 +
  1.1698 + 2. Building PCRE using VPATH was broken. Hopefully it is now fixed.
  1.1699 +
  1.1700 + 3. Added "b" to the 2nd argument of fopen() in dftables.c, for non-Unix-like
  1.1701 +    operating environments where this matters.
  1.1702 +
  1.1703 + 4. Applied Giuseppe Maxia's patch to add additional features for controlling
  1.1704 +    PCRE options from within the C++ wrapper.
  1.1705 +
  1.1706 + 5. Named capturing subpatterns were not being correctly counted when a pattern
  1.1707 +    was compiled. This caused two problems: (a) If there were more than 100
  1.1708 +    such subpatterns, the calculation of the memory needed for the whole
  1.1709 +    compiled pattern went wrong, leading to an overflow error. (b) Numerical
  1.1710 +    back references of the form \12, where the number was greater than 9, were
  1.1711 +    not recognized as back references, even though there were sufficient
  1.1712 +    previous subpatterns.
  1.1713 +
  1.1714 + 6. Two minor patches to pcrecpp.cc in order to allow it to compile on older
  1.1715 +    versions of gcc, e.g. 2.95.4.
  1.1716 +
  1.1717 +
  1.1718 +Version 6.1 21-Jun-05
  1.1719 +---------------------
  1.1720 +
  1.1721 + 1. There was one reference to the variable "posix" in pcretest.c that was not
  1.1722 +    surrounded by "#if !defined NOPOSIX".
  1.1723 +
  1.1724 + 2. Make it possible to compile pcretest without DFA support, UTF8 support, or
  1.1725 +    the cross-check on the old pcre_info() function, for the benefit of the
  1.1726 +    cut-down version of PCRE that is currently imported into Exim.
  1.1727 +
  1.1728 + 3. A (silly) pattern starting with (?i)(?-i) caused an internal space
  1.1729 +    allocation error. I've done the easy fix, which wastes 2 bytes for sensible
  1.1730 +    patterns that start (?i) but I don't think that matters. The use of (?i) is
  1.1731 +    just an example; this all applies to the other options as well.
  1.1732 +
  1.1733 + 4. Since libtool seems to echo the compile commands it is issuing, the output
  1.1734 +    from "make" can be reduced a bit by putting "@" in front of each libtool
  1.1735 +    compile command.
  1.1736 +
  1.1737 + 5. Patch from the folks at Google for configure.in to be a bit more thorough
  1.1738 +    in checking for a suitable C++ installation before trying to compile the
  1.1739 +    C++ stuff. This should fix a reported problem when a compiler was present,
  1.1740 +    but no suitable headers.
  1.1741 +
  1.1742 + 6. The man pages all had just "PCRE" as their title. I have changed them to
  1.1743 +    be the relevant file name. I have also arranged that these names are
  1.1744 +    retained in the file doc/pcre.txt, which is a concatenation in text format
  1.1745 +    of all the man pages except the little individual ones for each function.
  1.1746 +
  1.1747 + 7. The NON-UNIX-USE file had not been updated for the different set of source
  1.1748 +    files that come with release 6. I also added a few comments about the C++
  1.1749 +    wrapper.
  1.1750 +
  1.1751 +
  1.1752 +Version 6.0 07-Jun-05
  1.1753 +---------------------
  1.1754 +
  1.1755 + 1. Some minor internal re-organization to help with my DFA experiments.
  1.1756 +
  1.1757 + 2. Some missing #ifdef SUPPORT_UCP conditionals in pcretest and printint that
  1.1758 +    didn't matter for the library itself when fully configured, but did matter
  1.1759 +    when compiling without UCP support, or within Exim, where the ucp files are
  1.1760 +    not imported.
  1.1761 +
  1.1762 + 3. Refactoring of the library code to split up the various functions into
  1.1763 +    different source modules. The addition of the new DFA matching code (see
  1.1764 +    below) to a single monolithic source would have made it really too
  1.1765 +    unwieldy, quite apart from causing all the code to be include in a
  1.1766 +    statically linked application, when only some functions are used. This is
  1.1767 +    relevant even without the DFA addition now that patterns can be compiled in
  1.1768 +    one application and matched in another.
  1.1769 +
  1.1770 +    The downside of splitting up is that there have to be some external
  1.1771 +    functions and data tables that are used internally in different modules of
  1.1772 +    the library but which are not part of the API. These have all had their
  1.1773 +    names changed to start with "_pcre_" so that they are unlikely to clash
  1.1774 +    with other external names.
  1.1775 +
  1.1776 + 4. Added an alternate matching function, pcre_dfa_exec(), which matches using
  1.1777 +    a different (DFA) algorithm. Although it is slower than the original
  1.1778 +    function, it does have some advantages for certain types of matching
  1.1779 +    problem.
  1.1780 +
  1.1781 + 5. Upgrades to pcretest in order to test the features of pcre_dfa_exec(),
  1.1782 +    including restarting after a partial match.
  1.1783 +
  1.1784 + 6. A patch for pcregrep that defines INVALID_FILE_ATTRIBUTES if it is not
  1.1785 +    defined when compiling for Windows was sent to me. I have put it into the
  1.1786 +    code, though I have no means of testing or verifying it.
  1.1787 +
  1.1788 + 7. Added the pcre_refcount() auxiliary function.
  1.1789 +
  1.1790 + 8. Added the PCRE_FIRSTLINE option. This constrains an unanchored pattern to
  1.1791 +    match before or at the first newline in the subject string. In pcretest,
  1.1792 +    the /f option on a pattern can be used to set this.
  1.1793 +
  1.1794 + 9. A repeated \w when used in UTF-8 mode with characters greater than 256
  1.1795 +    would behave wrongly. This has been present in PCRE since release 4.0.
  1.1796 +
  1.1797 +10. A number of changes to the pcregrep command:
  1.1798 +
  1.1799 +    (a) Refactored how -x works; insert ^(...)$ instead of setting
  1.1800 +        PCRE_ANCHORED and checking the length, in preparation for adding
  1.1801 +        something similar for -w.
  1.1802 +
  1.1803 +    (b) Added the -w (match as a word) option.
  1.1804 +
  1.1805 +    (c) Refactored the way lines are read and buffered so as to have more
  1.1806 +        than one at a time available.
  1.1807 +
  1.1808 +    (d) Implemented a pcregrep test script.
  1.1809 +
  1.1810 +    (e) Added the -M (multiline match) option. This allows patterns to match
  1.1811 +        over several lines of the subject. The buffering ensures that at least
  1.1812 +        8K, or the rest of the document (whichever is the shorter) is available
  1.1813 +        for matching (and similarly the previous 8K for lookbehind assertions).
  1.1814 +
  1.1815 +    (f) Changed the --help output so that it now says
  1.1816 +
  1.1817 +          -w, --word-regex(p)
  1.1818 +
  1.1819 +        instead of two lines, one with "regex" and the other with "regexp"
  1.1820 +        because that confused at least one person since the short forms are the
  1.1821 +        same. (This required a bit of code, as the output is generated
  1.1822 +        automatically from a table. It wasn't just a text change.)
  1.1823 +
  1.1824 +    (g) -- can be used to terminate pcregrep options if the next thing isn't an
  1.1825 +        option but starts with a hyphen. Could be a pattern or a path name
  1.1826 +        starting with a hyphen, for instance.
  1.1827 +
  1.1828 +    (h) "-" can be given as a file name to represent stdin.
  1.1829 +
  1.1830 +    (i) When file names are being printed, "(standard input)" is used for
  1.1831 +        the standard input, for compatibility with GNU grep. Previously
  1.1832 +        "<stdin>" was used.
  1.1833 +
  1.1834 +    (j) The option --label=xxx can be used to supply a name to be used for
  1.1835 +        stdin when file names are being printed. There is no short form.
  1.1836 +
  1.1837 +    (k) Re-factored the options decoding logic because we are going to add
  1.1838 +        two more options that take data. Such options can now be given in four
  1.1839 +        different ways, e.g. "-fname", "-f name", "--file=name", "--file name".
  1.1840 +
  1.1841 +    (l) Added the -A, -B, and -C options for requesting that lines of context
  1.1842 +        around matches be printed.
  1.1843 +
  1.1844 +    (m) Added the -L option to print the names of files that do not contain
  1.1845 +        any matching lines, that is, the complement of -l.
  1.1846 +
  1.1847 +    (n) The return code is 2 if any file cannot be opened, but pcregrep does
  1.1848 +        continue to scan other files.
  1.1849 +
  1.1850 +    (o) The -s option was incorrectly implemented. For compatibility with other
  1.1851 +        greps, it now suppresses the error message for a non-existent or non-
  1.1852 +        accessible file (but not the return code). There is a new option called
  1.1853 +        -q that suppresses the output of matching lines, which was what -s was
  1.1854 +        previously doing.
  1.1855 +
  1.1856 +    (p) Added --include and --exclude options to specify files for inclusion
  1.1857 +        and exclusion when recursing.
  1.1858 +
  1.1859 +11. The Makefile was not using the Autoconf-supported LDFLAGS macro properly.
  1.1860 +    Hopefully, it now does.
  1.1861 +
  1.1862 +12. Missing cast in pcre_study().
  1.1863 +
  1.1864 +13. Added an "uninstall" target to the makefile.
  1.1865 +
  1.1866 +14. Replaced "extern" in the function prototypes in Makefile.in with
  1.1867 +    "PCRE_DATA_SCOPE", which defaults to 'extern' or 'extern "C"' in the Unix
  1.1868 +    world, but is set differently for Windows.
  1.1869 +
  1.1870 +15. Added a second compiling function called pcre_compile2(). The only
  1.1871 +    difference is that it has an extra argument, which is a pointer to an
  1.1872 +    integer error code. When there is a compile-time failure, this is set
  1.1873 +    non-zero, in addition to the error test pointer being set to point to an
  1.1874 +    error message. The new argument may be NULL if no error number is required
  1.1875 +    (but then you may as well call pcre_compile(), which is now just a
  1.1876 +    wrapper). This facility is provided because some applications need a
  1.1877 +    numeric error indication, but it has also enabled me to tidy up the way
  1.1878 +    compile-time errors are handled in the POSIX wrapper.
  1.1879 +
  1.1880 +16. Added VPATH=.libs to the makefile; this should help when building with one
  1.1881 +    prefix path and installing with another. (Or so I'm told by someone who
  1.1882 +    knows more about this stuff than I do.)
  1.1883 +
  1.1884 +17. Added a new option, REG_DOTALL, to the POSIX function regcomp(). This
  1.1885 +    passes PCRE_DOTALL to the pcre_compile() function, making the "." character
  1.1886 +    match everything, including newlines. This is not POSIX-compatible, but
  1.1887 +    somebody wanted the feature. From pcretest it can be activated by using
  1.1888 +    both the P and the s flags.
  1.1889 +
  1.1890 +18. AC_PROG_LIBTOOL appeared twice in Makefile.in. Removed one.
  1.1891 +
  1.1892 +19. libpcre.pc was being incorrectly installed as executable.
  1.1893 +
  1.1894 +20. A couple of places in pcretest check for end-of-line by looking for '\n';
  1.1895 +    it now also looks for '\r' so that it will work unmodified on Windows.
  1.1896 +
  1.1897 +21. Added Google's contributed C++ wrapper to the distribution.
  1.1898 +
  1.1899 +22. Added some untidy missing memory free() calls in pcretest, to keep
  1.1900 +    Electric Fence happy when testing.
  1.1901 +
  1.1902 +
  1.1903 +
  1.1904 +Version 5.0 13-Sep-04
  1.1905 +---------------------
  1.1906 +
  1.1907 + 1. Internal change: literal characters are no longer packed up into items
  1.1908 +    containing multiple characters in a single byte-string. Each character
  1.1909 +    is now matched using a separate opcode. However, there may be more than one
  1.1910 +    byte in the character in UTF-8 mode.
  1.1911 +
  1.1912 + 2. The pcre_callout_block structure has two new fields: pattern_position and
  1.1913 +    next_item_length. These contain the offset in the pattern to the next match
  1.1914 +    item, and its length, respectively.
  1.1915 +
  1.1916 + 3. The PCRE_AUTO_CALLOUT option for pcre_compile() requests the automatic
  1.1917 +    insertion of callouts before each pattern item. Added the /C option to
  1.1918 +    pcretest to make use of this.
  1.1919 +
  1.1920 + 4. On the advice of a Windows user, the lines
  1.1921 +
  1.1922 +      #if defined(_WIN32) || defined(WIN32)
  1.1923 +      _setmode( _fileno( stdout ), 0x8000 );
  1.1924 +      #endif  /* defined(_WIN32) || defined(WIN32) */
  1.1925 +
  1.1926 +    have been added to the source of pcretest. This apparently does useful
  1.1927 +    magic in relation to line terminators.
  1.1928 +
  1.1929 + 5. Changed "r" and "w" in the calls to fopen() in pcretest to "rb" and "wb"
  1.1930 +    for the benefit of those environments where the "b" makes a difference.
  1.1931 +
  1.1932 + 6. The icc compiler has the same options as gcc, but "configure" doesn't seem
  1.1933 +    to know about it. I have put a hack into configure.in that adds in code
  1.1934 +    to set GCC=yes if CC=icc. This seems to end up at a point in the
  1.1935 +    generated configure script that is early enough to affect the setting of
  1.1936 +    compiler options, which is what is needed, but I have no means of testing
  1.1937 +    whether it really works. (The user who reported this had patched the
  1.1938 +    generated configure script, which of course I cannot do.)
  1.1939 +
  1.1940 +    LATER: After change 22 below (new libtool files), the configure script
  1.1941 +    seems to know about icc (and also ecc). Therefore, I have commented out
  1.1942 +    this hack in configure.in.
  1.1943 +
  1.1944 + 7. Added support for pkg-config (2 patches were sent in).
  1.1945 +
  1.1946 + 8. Negated POSIX character classes that used a combination of internal tables
  1.1947 +    were completely broken. These were [[:^alpha:]], [[:^alnum:]], and
  1.1948 +    [[:^ascii]]. Typically, they would match almost any characters. The other
  1.1949 +    POSIX classes were not broken in this way.
  1.1950 +
  1.1951 + 9. Matching the pattern "\b.*?" against "ab cd", starting at offset 1, failed
  1.1952 +    to find the match, as PCRE was deluded into thinking that the match had to
  1.1953 +    start at the start point or following a newline. The same bug applied to
  1.1954 +    patterns with negative forward assertions or any backward assertions
  1.1955 +    preceding ".*" at the start, unless the pattern required a fixed first
  1.1956 +    character. This was a failing pattern: "(?!.bcd).*". The bug is now fixed.
  1.1957 +
  1.1958 +10. In UTF-8 mode, when moving forwards in the subject after a failed match
  1.1959 +    starting at the last subject character, bytes beyond the end of the subject
  1.1960 +    string were read.
  1.1961 +
  1.1962 +11. Renamed the variable "class" as "classbits" to make life easier for C++
  1.1963 +    users. (Previously there was a macro definition, but it apparently wasn't
  1.1964 +    enough.)
  1.1965 +
  1.1966 +12. Added the new field "tables" to the extra data so that tables can be passed
  1.1967 +    in at exec time, or the internal tables can be re-selected. This allows
  1.1968 +    a compiled regex to be saved and re-used at a later time by a different
  1.1969 +    program that might have everything at different addresses.
  1.1970 +
  1.1971 +13. Modified the pcre-config script so that, when run on Solaris, it shows a
  1.1972 +    -R library as well as a -L library.
  1.1973 +
  1.1974 +14. The debugging options of pcretest (-d on the command line or D on a
  1.1975 +    pattern) showed incorrect output for anything following an extended class
  1.1976 +    that contained multibyte characters and which was followed by a quantifier.
  1.1977 +
  1.1978 +15. Added optional support for general category Unicode character properties
  1.1979 +    via the \p, \P, and \X escapes. Unicode property support implies UTF-8
  1.1980 +    support. It adds about 90K to the size of the library. The meanings of the
  1.1981 +    inbuilt class escapes such as \d and \s have NOT been changed.
  1.1982 +
  1.1983 +16. Updated pcredemo.c to include calls to free() to release the memory for the
  1.1984 +    compiled pattern.
  1.1985 +
  1.1986 +17. The generated file chartables.c was being created in the source directory
  1.1987 +    instead of in the building directory. This caused the build to fail if the
  1.1988 +    source directory was different from the building directory, and was
  1.1989 +    read-only.
  1.1990 +
  1.1991 +18. Added some sample Win commands from Mark Tetrode into the NON-UNIX-USE
  1.1992 +    file. No doubt somebody will tell me if they don't make sense... Also added
  1.1993 +    Dan Mooney's comments about building on OpenVMS.
  1.1994 +
  1.1995 +19. Added support for partial matching via the PCRE_PARTIAL option for
  1.1996 +    pcre_exec() and the \P data escape in pcretest.
  1.1997 +
  1.1998 +20. Extended pcretest with 3 new pattern features:
  1.1999 +
  1.2000 +    (i)   A pattern option of the form ">rest-of-line" causes pcretest to
  1.2001 +          write the compiled pattern to the file whose name is "rest-of-line".
  1.2002 +          This is a straight binary dump of the data, with the saved pointer to
  1.2003 +          the character tables forced to be NULL. The study data, if any, is
  1.2004 +          written too. After writing, pcretest reads a new pattern.
  1.2005 +
  1.2006 +    (ii)  If, instead of a pattern, "<rest-of-line" is given, pcretest reads a
  1.2007 +          compiled pattern from the given file. There must not be any
  1.2008 +          occurrences of "<" in the file name (pretty unlikely); if there are,
  1.2009 +          pcretest will instead treat the initial "<" as a pattern delimiter.
  1.2010 +          After reading in the pattern, pcretest goes on to read data lines as
  1.2011 +          usual.
  1.2012 +
  1.2013 +    (iii) The F pattern option causes pcretest to flip the bytes in the 32-bit
  1.2014 +          and 16-bit fields in a compiled pattern, to simulate a pattern that
  1.2015 +          was compiled on a host of opposite endianness.
  1.2016 +
  1.2017 +21. The pcre-exec() function can now cope with patterns that were compiled on
  1.2018 +    hosts of opposite endianness, with this restriction:
  1.2019 +
  1.2020 +      As for any compiled expression that is saved and used later, the tables
  1.2021 +      pointer field cannot be preserved; the extra_data field in the arguments
  1.2022 +      to pcre_exec() should be used to pass in a tables address if a value
  1.2023 +      other than the default internal tables were used at compile time.
  1.2024 +
  1.2025 +22. Calling pcre_exec() with a negative value of the "ovecsize" parameter is
  1.2026 +    now diagnosed as an error. Previously, most of the time, a negative number
  1.2027 +    would have been treated as zero, but if in addition "ovector" was passed as
  1.2028 +    NULL, a crash could occur.
  1.2029 +
  1.2030 +23. Updated the files ltmain.sh, config.sub, config.guess, and aclocal.m4 with
  1.2031 +    new versions from the libtool 1.5 distribution (the last one is a copy of
  1.2032 +    a file called libtool.m4). This seems to have fixed the need to patch
  1.2033 +    "configure" to support Darwin 1.3 (which I used to do). However, I still
  1.2034 +    had to patch ltmain.sh to ensure that ${SED} is set (it isn't on my
  1.2035 +    workstation).
  1.2036 +
  1.2037 +24. Changed the PCRE licence to be the more standard "BSD" licence.
  1.2038 +
  1.2039 +
  1.2040 +Version 4.5 01-Dec-03
  1.2041 +---------------------
  1.2042 +
  1.2043 + 1. There has been some re-arrangement of the code for the match() function so
  1.2044 +    that it can be compiled in a version that does not call itself recursively.
  1.2045 +    Instead, it keeps those local variables that need separate instances for
  1.2046 +    each "recursion" in a frame on the heap, and gets/frees frames whenever it
  1.2047 +    needs to "recurse". Keeping track of where control must go is done by means
  1.2048 +    of setjmp/longjmp. The whole thing is implemented by a set of macros that
  1.2049 +    hide most of the details from the main code, and operates only if
  1.2050 +    NO_RECURSE is defined while compiling pcre.c. If PCRE is built using the
  1.2051 +    "configure" mechanism, "--disable-stack-for-recursion" turns on this way of
  1.2052 +    operating.
  1.2053 +
  1.2054 +    To make it easier for callers to provide specially tailored get/free
  1.2055 +    functions for this usage, two new functions, pcre_stack_malloc, and
  1.2056 +    pcre_stack_free, are used. They are always called in strict stacking order,
  1.2057 +    and the size of block requested is always the same.
  1.2058 +
  1.2059 +    The PCRE_CONFIG_STACKRECURSE info parameter can be used to find out whether
  1.2060 +    PCRE has been compiled to use the stack or the heap for recursion. The
  1.2061 +    -C option of pcretest uses this to show which version is compiled.
  1.2062 +
  1.2063 +    A new data escape \S, is added to pcretest; it causes the amounts of store
  1.2064 +    obtained and freed by both kinds of malloc/free at match time to be added
  1.2065 +    to the output.
  1.2066 +
  1.2067 + 2. Changed the locale test to use "fr_FR" instead of "fr" because that's
  1.2068 +    what's available on my current Linux desktop machine.
  1.2069 +
  1.2070 + 3. When matching a UTF-8 string, the test for a valid string at the start has
  1.2071 +    been extended. If start_offset is not zero, PCRE now checks that it points
  1.2072 +    to a byte that is the start of a UTF-8 character. If not, it returns
  1.2073 +    PCRE_ERROR_BADUTF8_OFFSET (-11). Note: the whole string is still checked;
  1.2074 +    this is necessary because there may be backward assertions in the pattern.
  1.2075 +    When matching the same subject several times, it may save resources to use
  1.2076 +    PCRE_NO_UTF8_CHECK on all but the first call if the string is long.
  1.2077 +
  1.2078 + 4. The code for checking the validity of UTF-8 strings has been tightened so
  1.2079 +    that it rejects (a) strings containing 0xfe or 0xff bytes and (b) strings
  1.2080 +    containing "overlong sequences".
  1.2081 +
  1.2082 + 5. Fixed a bug (appearing twice) that I could not find any way of exploiting!
  1.2083 +    I had written "if ((digitab[*p++] && chtab_digit) == 0)" where the "&&"
  1.2084 +    should have been "&", but it just so happened that all the cases this let
  1.2085 +    through by mistake were picked up later in the function.
  1.2086 +
  1.2087 + 6. I had used a variable called "isblank" - this is a C99 function, causing
  1.2088 +    some compilers to warn. To avoid this, I renamed it (as "blankclass").
  1.2089 +
  1.2090 + 7. Cosmetic: (a) only output another newline at the end of pcretest if it is
  1.2091 +    prompting; (b) run "./pcretest /dev/null" at the start of the test script
  1.2092 +    so the version is shown; (c) stop "make test" echoing "./RunTest".
  1.2093 +
  1.2094 + 8. Added patches from David Burgess to enable PCRE to run on EBCDIC systems.
  1.2095 +
  1.2096 + 9. The prototype for memmove() for systems that don't have it was using
  1.2097 +    size_t, but the inclusion of the header that defines size_t was later. I've
  1.2098 +    moved the #includes for the C headers earlier to avoid this.
  1.2099 +
  1.2100 +10. Added some adjustments to the code to make it easier to compiler on certain
  1.2101 +    special systems:
  1.2102 +
  1.2103 +      (a) Some "const" qualifiers were missing.
  1.2104 +      (b) Added the macro EXPORT before all exported functions; by default this
  1.2105 +          is defined to be empty.
  1.2106 +      (c) Changed the dftables auxiliary program (that builds chartables.c) so
  1.2107 +          that it reads its output file name as an argument instead of writing
  1.2108 +          to the standard output and assuming this can be redirected.
  1.2109 +
  1.2110 +11. In UTF-8 mode, if a recursive reference (e.g. (?1)) followed a character
  1.2111 +    class containing characters with values greater than 255, PCRE compilation
  1.2112 +    went into a loop.
  1.2113 +
  1.2114 +12. A recursive reference to a subpattern that was within another subpattern
  1.2115 +    that had a minimum quantifier of zero caused PCRE to crash. For example,
  1.2116 +    (x(y(?2))z)? provoked this bug with a subject that got as far as the
  1.2117 +    recursion. If the recursively-called subpattern itself had a zero repeat,
  1.2118 +    that was OK.
  1.2119 +
  1.2120 +13. In pcretest, the buffer for reading a data line was set at 30K, but the
  1.2121 +    buffer into which it was copied (for escape processing) was still set at
  1.2122 +    1024, so long lines caused crashes.
  1.2123 +
  1.2124 +14. A pattern such as /[ab]{1,3}+/ failed to compile, giving the error
  1.2125 +    "internal error: code overflow...". This applied to any character class
  1.2126 +    that was followed by a possessive quantifier.
  1.2127 +
  1.2128 +15. Modified the Makefile to add libpcre.la as a prerequisite for
  1.2129 +    libpcreposix.la because I was told this is needed for a parallel build to
  1.2130 +    work.
  1.2131 +
  1.2132 +16. If a pattern that contained .* following optional items at the start was
  1.2133 +    studied, the wrong optimizing data was generated, leading to matching
  1.2134 +    errors. For example, studying /[ab]*.*c/ concluded, erroneously, that any
  1.2135 +    matching string must start with a or b or c. The correct conclusion for
  1.2136 +    this pattern is that a match can start with any character.
  1.2137 +
  1.2138 +
  1.2139 +Version 4.4 13-Aug-03
  1.2140 +---------------------
  1.2141 +
  1.2142 + 1. In UTF-8 mode, a character class containing characters with values between
  1.2143 +    127 and 255 was not handled correctly if the compiled pattern was studied.
  1.2144 +    In fixing this, I have also improved the studying algorithm for such
  1.2145 +    classes (slightly).
  1.2146 +
  1.2147 + 2. Three internal functions had redundant arguments passed to them. Removal
  1.2148 +    might give a very teeny performance improvement.
  1.2149 +
  1.2150 + 3. Documentation bug: the value of the capture_top field in a callout is *one
  1.2151 +    more than* the number of the hightest numbered captured substring.
  1.2152 +
  1.2153 + 4. The Makefile linked pcretest and pcregrep with -lpcre, which could result
  1.2154 +    in incorrectly linking with a previously installed version. They now link
  1.2155 +    explicitly with libpcre.la.
  1.2156 +
  1.2157 + 5. configure.in no longer needs to recognize Cygwin specially.
  1.2158 +
  1.2159 + 6. A problem in pcre.in for Windows platforms is fixed.
  1.2160 +
  1.2161 + 7. If a pattern was successfully studied, and the -d (or /D) flag was given to
  1.2162 +    pcretest, it used to include the size of the study block as part of its
  1.2163 +    output. Unfortunately, the structure contains a field that has a different
  1.2164 +    size on different hardware architectures. This meant that the tests that
  1.2165 +    showed this size failed. As the block is currently always of a fixed size,
  1.2166 +    this information isn't actually particularly useful in pcretest output, so
  1.2167 +    I have just removed it.
  1.2168 +
  1.2169 + 8. Three pre-processor statements accidentally did not start in column 1.
  1.2170 +    Sadly, there are *still* compilers around that complain, even though
  1.2171 +    standard C has not required this for well over a decade. Sigh.
  1.2172 +
  1.2173 + 9. In pcretest, the code for checking callouts passed small integers in the
  1.2174 +    callout_data field, which is a void * field. However, some picky compilers
  1.2175 +    complained about the casts involved for this on 64-bit systems. Now
  1.2176 +    pcretest passes the address of the small integer instead, which should get
  1.2177 +    rid of the warnings.
  1.2178 +
  1.2179 +10. By default, when in UTF-8 mode, PCRE now checks for valid UTF-8 strings at
  1.2180 +    both compile and run time, and gives an error if an invalid UTF-8 sequence
  1.2181 +    is found. There is a option for disabling this check in cases where the
  1.2182 +    string is known to be correct and/or the maximum performance is wanted.
  1.2183 +
  1.2184 +11. In response to a bug report, I changed one line in Makefile.in from
  1.2185 +
  1.2186 +        -Wl,--out-implib,.libs/lib@[email protected] \
  1.2187 +    to
  1.2188 +        -Wl,--out-implib,.libs/@[email protected] \
  1.2189 +
  1.2190 +    to look similar to other lines, but I have no way of telling whether this
  1.2191 +    is the right thing to do, as I do not use Windows. No doubt I'll get told
  1.2192 +    if it's wrong...
  1.2193 +
  1.2194 +
  1.2195 +Version 4.3 21-May-03
  1.2196 +---------------------
  1.2197 +
  1.2198 +1. Two instances of @WIN_PREFIX@ omitted from the Windows targets in the
  1.2199 +   Makefile.
  1.2200 +
  1.2201 +2. Some refactoring to improve the quality of the code:
  1.2202 +
  1.2203 +   (i)   The utf8_table... variables are now declared "const".
  1.2204 +
  1.2205 +   (ii)  The code for \cx, which used the "case flipping" table to upper case
  1.2206 +         lower case letters, now just substracts 32. This is ASCII-specific,
  1.2207 +         but the whole concept of \cx is ASCII-specific, so it seems
  1.2208 +         reasonable.
  1.2209 +
  1.2210 +   (iii) PCRE was using its character types table to recognize decimal and
  1.2211 +         hexadecimal digits in the pattern. This is silly, because it handles
  1.2212 +         only 0-9, a-f, and A-F, but the character types table is locale-
  1.2213 +         specific, which means strange things might happen. A private
  1.2214 +         table is now used for this - though it costs 256 bytes, a table is
  1.2215 +         much faster than multiple explicit tests. Of course, the standard
  1.2216 +         character types table is still used for matching digits in subject
  1.2217 +         strings against \d.
  1.2218 +
  1.2219 +   (iv)  Strictly, the identifier ESC_t is reserved by POSIX (all identifiers
  1.2220 +         ending in _t are). So I've renamed it as ESC_tee.
  1.2221 +
  1.2222 +3. The first argument for regexec() in the POSIX wrapper should have been
  1.2223 +   defined as "const".
  1.2224 +
  1.2225 +4. Changed pcretest to use malloc() for its buffers so that they can be
  1.2226 +   Electric Fenced for debugging.
  1.2227 +
  1.2228 +5. There were several places in the code where, in UTF-8 mode, PCRE would try
  1.2229 +   to read one or more bytes before the start of the subject string. Often this
  1.2230 +   had no effect on PCRE's behaviour, but in some circumstances it could
  1.2231 +   provoke a segmentation fault.
  1.2232 +
  1.2233 +6. A lookbehind at the start of a pattern in UTF-8 mode could also cause PCRE
  1.2234 +   to try to read one or more bytes before the start of the subject string.
  1.2235 +
  1.2236 +7. A lookbehind in a pattern matched in non-UTF-8 mode on a PCRE compiled with
  1.2237 +   UTF-8 support could misbehave in various ways if the subject string
  1.2238 +   contained bytes with the 0x80 bit set and the 0x40 bit unset in a lookbehind
  1.2239 +   area. (PCRE was not checking for the UTF-8 mode flag, and trying to move
  1.2240 +   back over UTF-8 characters.)
  1.2241 +
  1.2242 +
  1.2243 +Version 4.2 14-Apr-03
  1.2244 +---------------------
  1.2245 +
  1.2246 +1. Typo "#if SUPPORT_UTF8" instead of "#ifdef SUPPORT_UTF8" fixed.
  1.2247 +
  1.2248 +2. Changes to the building process, supplied by Ronald Landheer-Cieslak
  1.2249 +     [ON_WINDOWS]: new variable, "#" on non-Windows platforms
  1.2250 +     [NOT_ON_WINDOWS]: new variable, "#" on Windows platforms
  1.2251 +     [WIN_PREFIX]: new variable, "cyg" for Cygwin
  1.2252 +     * Makefile.in: use autoconf substitution for OBJEXT, EXEEXT, BUILD_OBJEXT
  1.2253 +       and BUILD_EXEEXT
  1.2254 +     Note: automatic setting of the BUILD variables is not yet working
  1.2255 +     set CPPFLAGS and BUILD_CPPFLAGS (but don't use yet) - should be used at
  1.2256 +       compile-time but not at link-time
  1.2257 +     [LINK]: use for linking executables only
  1.2258 +     make different versions for Windows and non-Windows
  1.2259 +     [LINKLIB]: new variable, copy of UNIX-style LINK, used for linking
  1.2260 +       libraries
  1.2261 +     [LINK_FOR_BUILD]: new variable
  1.2262 +     [OBJEXT]: use throughout
  1.2263 +     [EXEEXT]: use throughout
  1.2264 +     <winshared>: new target
  1.2265 +     <wininstall>: new target
  1.2266 +     <dftables.o>: use native compiler
  1.2267 +     <dftables>: use native linker
  1.2268 +     <install>: handle Windows platform correctly
  1.2269 +     <clean>: ditto
  1.2270 +     <check>: ditto
  1.2271 +     copy DLL to top builddir before testing
  1.2272 +
  1.2273 +   As part of these changes, -no-undefined was removed again. This was reported
  1.2274 +   to give trouble on HP-UX 11.0, so getting rid of it seems like a good idea
  1.2275 +   in any case.
  1.2276 +
  1.2277 +3. Some tidies to get rid of compiler warnings:
  1.2278 +
  1.2279 +   . In the match_data structure, match_limit was an unsigned long int, whereas
  1.2280 +     match_call_count was an int. I've made them both unsigned long ints.
  1.2281 +
  1.2282 +   . In pcretest the fact that a const uschar * doesn't automatically cast to
  1.2283 +     a void * provoked a warning.
  1.2284 +
  1.2285 +   . Turning on some more compiler warnings threw up some "shadow" variables
  1.2286 +     and a few more missing casts.
  1.2287 +
  1.2288 +4. If PCRE was complied with UTF-8 support, but called without the PCRE_UTF8
  1.2289 +   option, a class that contained a single character with a value between 128
  1.2290 +   and 255 (e.g. /[\xFF]/) caused PCRE to crash.
  1.2291 +
  1.2292 +5. If PCRE was compiled with UTF-8 support, but called without the PCRE_UTF8
  1.2293 +   option, a class that contained several characters, but with at least one
  1.2294 +   whose value was between 128 and 255 caused PCRE to crash.
  1.2295 +
  1.2296 +
  1.2297 +Version 4.1 12-Mar-03
  1.2298 +---------------------
  1.2299 +
  1.2300 +1. Compiling with gcc -pedantic found a couple of places where casts were
  1.2301 +needed, and a string in dftables.c that was longer than standard compilers are
  1.2302 +required to support.
  1.2303 +
  1.2304 +2. Compiling with Sun's compiler found a few more places where the code could
  1.2305 +be tidied up in order to avoid warnings.
  1.2306 +
  1.2307 +3. The variables for cross-compiling were called HOST_CC and HOST_CFLAGS; the
  1.2308 +first of these names is deprecated in the latest Autoconf in favour of the name
  1.2309 +CC_FOR_BUILD, because "host" is typically used to mean the system on which the
  1.2310 +compiled code will be run. I can't find a reference for HOST_CFLAGS, but by
  1.2311 +analogy I have changed it to CFLAGS_FOR_BUILD.
  1.2312 +
  1.2313 +4. Added -no-undefined to the linking command in the Makefile, because this is
  1.2314 +apparently helpful for Windows. To make it work, also added "-L. -lpcre" to the
  1.2315 +linking step for the pcreposix library.
  1.2316 +
  1.2317 +5. PCRE was failing to diagnose the case of two named groups with the same
  1.2318 +name.
  1.2319 +
  1.2320 +6. A problem with one of PCRE's optimizations was discovered. PCRE remembers a
  1.2321 +literal character that is needed in the subject for a match, and scans along to
  1.2322 +ensure that it is present before embarking on the full matching process. This
  1.2323 +saves time in cases of nested unlimited repeats that are never going to match.
  1.2324 +Problem: the scan can take a lot of time if the subject is very long (e.g.
  1.2325 +megabytes), thus penalizing straightforward matches. It is now done only if the
  1.2326 +amount of subject to be scanned is less than 1000 bytes.
  1.2327 +
  1.2328 +7. A lesser problem with the same optimization is that it was recording the
  1.2329 +first character of an anchored pattern as "needed", thus provoking a search
  1.2330 +right along the subject, even when the first match of the pattern was going to
  1.2331 +fail. The "needed" character is now not set for anchored patterns, unless it
  1.2332 +follows something in the pattern that is of non-fixed length. Thus, it still
  1.2333 +fulfils its original purpose of finding quick non-matches in cases of nested
  1.2334 +unlimited repeats, but isn't used for simple anchored patterns such as /^abc/.
  1.2335 +
  1.2336 +
  1.2337 +Version 4.0 17-Feb-03
  1.2338 +---------------------
  1.2339 +
  1.2340 +1. If a comment in an extended regex that started immediately after a meta-item
  1.2341 +extended to the end of string, PCRE compiled incorrect data. This could lead to
  1.2342 +all kinds of weird effects. Example: /#/ was bad; /()#/ was bad; /a#/ was not.
  1.2343 +
  1.2344 +2. Moved to autoconf 2.53 and libtool 1.4.2.
  1.2345 +
  1.2346 +3. Perl 5.8 no longer needs "use utf8" for doing UTF-8 things. Consequently,
  1.2347 +the special perltest8 script is no longer needed - all the tests can be run
  1.2348 +from a single perltest script.
  1.2349 +
  1.2350 +4. From 5.004, Perl has not included the VT character (0x0b) in the set defined
  1.2351 +by \s. It has now been removed in PCRE. This means it isn't recognized as
  1.2352 +whitespace in /x regexes too, which is the same as Perl. Note that the POSIX
  1.2353 +class [:space:] *does* include VT, thereby creating a mess.
  1.2354 +
  1.2355 +5. Added the class [:blank:] (a GNU extension from Perl 5.8) to match only
  1.2356 +space and tab.
  1.2357 +
  1.2358 +6. Perl 5.005 was a long time ago. It's time to amalgamate the tests that use
  1.2359 +its new features into the main test script, reducing the number of scripts.
  1.2360 +
  1.2361 +7. Perl 5.8 has changed the meaning of patterns like /a(?i)b/. Earlier versions
  1.2362 +were backward compatible, and made the (?i) apply to the whole pattern, as if
  1.2363 +/i were given. Now it behaves more logically, and applies the option setting
  1.2364 +only to what follows. PCRE has been changed to follow suit. However, if it
  1.2365 +finds options settings right at the start of the pattern, it extracts them into
  1.2366 +the global options, as before. Thus, they show up in the info data.
  1.2367 +
  1.2368 +8. Added support for the \Q...\E escape sequence. Characters in between are
  1.2369 +treated as literals. This is slightly different from Perl in that $ and @ are
  1.2370 +also handled as literals inside the quotes. In Perl, they will cause variable
  1.2371 +interpolation. Note the following examples:
  1.2372 +
  1.2373 +    Pattern            PCRE matches      Perl matches
  1.2374 +
  1.2375 +    \Qabc$xyz\E        abc$xyz           abc followed by the contents of $xyz
  1.2376 +    \Qabc\$xyz\E       abc\$xyz          abc\$xyz
  1.2377 +    \Qabc\E\$\Qxyz\E   abc$xyz           abc$xyz
  1.2378 +
  1.2379 +For compatibility with Perl, \Q...\E sequences are recognized inside character
  1.2380 +classes as well as outside them.
  1.2381 +
  1.2382 +9. Re-organized 3 code statements in pcretest to avoid "overflow in
  1.2383 +floating-point constant arithmetic" warnings from a Microsoft compiler. Added a
  1.2384 +(size_t) cast to one statement in pcretest and one in pcreposix to avoid
  1.2385 +signed/unsigned warnings.
  1.2386 +
  1.2387 +10. SunOS4 doesn't have strtoul(). This was used only for unpicking the -o
  1.2388 +option for pcretest, so I've replaced it by a simple function that does just
  1.2389 +that job.
  1.2390 +
  1.2391 +11. pcregrep was ending with code 0 instead of 2 for the commands "pcregrep" or
  1.2392 +"pcregrep -".
  1.2393 +
  1.2394 +12. Added "possessive quantifiers" ?+, *+, ++, and {,}+ which come from Sun's
  1.2395 +Java package. This provides some syntactic sugar for simple cases of what my
  1.2396 +documentation calls "once-only subpatterns". A pattern such as x*+ is the same
  1.2397 +as (?>x*). In other words, if what is inside (?>...) is just a single repeated
  1.2398 +item, you can use this simplified notation. Note that only makes sense with
  1.2399 +greedy quantifiers. Consequently, the use of the possessive quantifier forces
  1.2400 +greediness, whatever the setting of the PCRE_UNGREEDY option.
  1.2401 +
  1.2402 +13. A change of greediness default within a pattern was not taking effect at
  1.2403 +the current level for patterns like /(b+(?U)a+)/. It did apply to parenthesized
  1.2404 +subpatterns that followed. Patterns like /b+(?U)a+/ worked because the option
  1.2405 +was abstracted outside.
  1.2406 +
  1.2407 +14. PCRE now supports the \G assertion. It is true when the current matching
  1.2408 +position is at the start point of the match. This differs from \A when the
  1.2409 +starting offset is non-zero. Used with the /g option of pcretest (or similar
  1.2410 +code), it works in the same way as it does for Perl's /g option. If all
  1.2411 +alternatives of a regex begin with \G, the expression is anchored to the start
  1.2412 +match position, and the "anchored" flag is set in the compiled expression.
  1.2413 +
  1.2414 +15. Some bugs concerning the handling of certain option changes within patterns
  1.2415 +have been fixed. These applied to options other than (?ims). For example,
  1.2416 +"a(?x: b c )d" did not match "XabcdY" but did match "Xa b c dY". It should have
  1.2417 +been the other way round. Some of this was related to change 7 above.
  1.2418 +
  1.2419 +16. PCRE now gives errors for /[.x.]/ and /[=x=]/ as unsupported POSIX
  1.2420 +features, as Perl does. Previously, PCRE gave the warnings only for /[[.x.]]/
  1.2421 +and /[[=x=]]/. PCRE now also gives an error for /[:name:]/ because it supports
  1.2422 +POSIX classes only within a class (e.g. /[[:alpha:]]/).
  1.2423 +
  1.2424 +17. Added support for Perl's \C escape. This matches one byte, even in UTF8
  1.2425 +mode. Unlike ".", it always matches newline, whatever the setting of
  1.2426 +PCRE_DOTALL. However, PCRE does not permit \C to appear in lookbehind
  1.2427 +assertions. Perl allows it, but it doesn't (in general) work because it can't
  1.2428 +calculate the length of the lookbehind. At least, that's the case for Perl
  1.2429 +5.8.0 - I've been told they are going to document that it doesn't work in
  1.2430 +future.
  1.2431 +
  1.2432 +18. Added an error diagnosis for escapes that PCRE does not support: these are
  1.2433 +\L, \l, \N, \P, \p, \U, \u, and \X.
  1.2434 +
  1.2435 +19. Although correctly diagnosing a missing ']' in a character class, PCRE was
  1.2436 +reading past the end of the pattern in cases such as /[abcd/.
  1.2437 +
  1.2438 +20. PCRE was getting more memory than necessary for patterns with classes that
  1.2439 +contained both POSIX named classes and other characters, e.g. /[[:space:]abc/.
  1.2440 +
  1.2441 +21. Added some code, conditional on #ifdef VPCOMPAT, to make life easier for
  1.2442 +compiling PCRE for use with Virtual Pascal.
  1.2443 +
  1.2444 +22. Small fix to the Makefile to make it work properly if the build is done
  1.2445 +outside the source tree.
  1.2446 +
  1.2447 +23. Added a new extension: a condition to go with recursion. If a conditional
  1.2448 +subpattern starts with (?(R) the "true" branch is used if recursion has
  1.2449 +happened, whereas the "false" branch is used only at the top level.
  1.2450 +
  1.2451 +24. When there was a very long string of literal characters (over 255 bytes
  1.2452 +without UTF support, over 250 bytes with UTF support), the computation of how
  1.2453 +much memory was required could be incorrect, leading to segfaults or other
  1.2454 +strange effects.
  1.2455 +
  1.2456 +25. PCRE was incorrectly assuming anchoring (either to start of subject or to
  1.2457 +start of line for a non-DOTALL pattern) when a pattern started with (.*) and
  1.2458 +there was a subsequent back reference to those brackets. This meant that, for
  1.2459 +example, /(.*)\d+\1/ failed to match "abc123bc". Unfortunately, it isn't
  1.2460 +possible to check for precisely this case. All we can do is abandon the
  1.2461 +optimization if .* occurs inside capturing brackets when there are any back
  1.2462 +references whatsoever. (See below for a better fix that came later.)
  1.2463 +
  1.2464 +26. The handling of the optimization for finding the first character of a
  1.2465 +non-anchored pattern, and for finding a character that is required later in the
  1.2466 +match were failing in some cases. This didn't break the matching; it just
  1.2467 +failed to optimize when it could. The way this is done has been re-implemented.
  1.2468 +
  1.2469 +27. Fixed typo in error message for invalid (?R item (it said "(?p").
  1.2470 +
  1.2471 +28. Added a new feature that provides some of the functionality that Perl
  1.2472 +provides with (?{...}). The facility is termed a "callout". The way it is done
  1.2473 +in PCRE is for the caller to provide an optional function, by setting
  1.2474 +pcre_callout to its entry point. Like pcre_malloc and pcre_free, this is a
  1.2475 +global variable. By default it is unset, which disables all calling out. To get
  1.2476 +the function called, the regex must include (?C) at appropriate points. This
  1.2477 +is, in fact, equivalent to (?C0), and any number <= 255 may be given with (?C).
  1.2478 +This provides a means of identifying different callout points. When PCRE
  1.2479 +reaches such a point in the regex, if pcre_callout has been set, the external
  1.2480 +function is called. It is provided with data in a structure called
  1.2481 +pcre_callout_block, which is defined in pcre.h. If the function returns 0,
  1.2482 +matching continues; if it returns a non-zero value, the match at the current
  1.2483 +point fails. However, backtracking will occur if possible. [This was changed
  1.2484 +later and other features added - see item 49 below.]
  1.2485 +
  1.2486 +29. pcretest is upgraded to test the callout functionality. It provides a
  1.2487 +callout function that displays information. By default, it shows the start of
  1.2488 +the match and the current position in the text. There are some new data escapes
  1.2489 +to vary what happens:
  1.2490 +
  1.2491 +    \C+         in addition, show current contents of captured substrings
  1.2492 +    \C-         do not supply a callout function
  1.2493 +    \C!n        return 1 when callout number n is reached
  1.2494 +    \C!n!m      return 1 when callout number n is reached for the mth time
  1.2495 +
  1.2496 +30. If pcregrep was called with the -l option and just a single file name, it
  1.2497 +output "<stdin>" if a match was found, instead of the file name.
  1.2498 +
  1.2499 +31. Improve the efficiency of the POSIX API to PCRE. If the number of capturing
  1.2500 +slots is less than POSIX_MALLOC_THRESHOLD, use a block on the stack to pass to
  1.2501 +pcre_exec(). This saves a malloc/free per call. The default value of
  1.2502 +POSIX_MALLOC_THRESHOLD is 10; it can be changed by --with-posix-malloc-threshold
  1.2503 +when configuring.
  1.2504 +
  1.2505 +32. The default maximum size of a compiled pattern is 64K. There have been a
  1.2506 +few cases of people hitting this limit. The code now uses macros to handle the
  1.2507 +storing of links as offsets within the compiled pattern. It defaults to 2-byte
  1.2508 +links, but this can be changed to 3 or 4 bytes by --with-link-size when
  1.2509 +configuring. Tests 2 and 5 work only with 2-byte links because they output
  1.2510 +debugging information about compiled patterns.
  1.2511 +
  1.2512 +33. Internal code re-arrangements:
  1.2513 +
  1.2514 +(a) Moved the debugging function for printing out a compiled regex into
  1.2515 +    its own source file (printint.c) and used #include to pull it into
  1.2516 +    pcretest.c and, when DEBUG is defined, into pcre.c, instead of having two
  1.2517 +    separate copies.
  1.2518 +
  1.2519 +(b) Defined the list of op-code names for debugging as a macro in
  1.2520 +    internal.h so that it is next to the definition of the opcodes.
  1.2521 +
  1.2522 +(c) Defined a table of op-code lengths for simpler skipping along compiled
  1.2523 +    code. This is again a macro in internal.h so that it is next to the
  1.2524 +    definition of the opcodes.
  1.2525 +
  1.2526 +34. Added support for recursive calls to individual subpatterns, along the
  1.2527 +lines of Robin Houston's patch (but implemented somewhat differently).
  1.2528 +
  1.2529 +35. Further mods to the Makefile to help Win32. Also, added code to pcregrep to
  1.2530 +allow it to read and process whole directories in Win32. This code was
  1.2531 +contributed by Lionel Fourquaux; it has not been tested by me.
  1.2532 +
  1.2533 +36. Added support for named subpatterns. The Python syntax (?P<name>...) is
  1.2534 +used to name a group. Names consist of alphanumerics and underscores, and must
  1.2535 +be unique. Back references use the syntax (?P=name) and recursive calls use
  1.2536 +(?P>name) which is a PCRE extension to the Python extension. Groups still have
  1.2537 +numbers. The function pcre_fullinfo() can be used after compilation to extract
  1.2538 +a name/number map. There are three relevant calls:
  1.2539 +
  1.2540 +  PCRE_INFO_NAMEENTRYSIZE        yields the size of each entry in the map
  1.2541 +  PCRE_INFO_NAMECOUNT            yields the number of entries
  1.2542 +  PCRE_INFO_NAMETABLE            yields a pointer to the map.
  1.2543 +
  1.2544 +The map is a vector of fixed-size entries. The size of each entry depends on
  1.2545 +the length of the longest name used. The first two bytes of each entry are the
  1.2546 +group number, most significant byte first. There follows the corresponding
  1.2547 +name, zero terminated. The names are in alphabetical order.
  1.2548 +
  1.2549 +37. Make the maximum literal string in the compiled code 250 for the non-UTF-8
  1.2550 +case instead of 255. Making it the same both with and without UTF-8 support
  1.2551 +means that the same test output works with both.
  1.2552 +
  1.2553 +38. There was a case of malloc(0) in the POSIX testing code in pcretest. Avoid
  1.2554 +calling malloc() with a zero argument.
  1.2555 +
  1.2556 +39. Change 25 above had to resort to a heavy-handed test for the .* anchoring
  1.2557 +optimization. I've improved things by keeping a bitmap of backreferences with
  1.2558 +numbers 1-31 so that if .* occurs inside capturing brackets that are not in
  1.2559 +fact referenced, the optimization can be applied. It is unlikely that a
  1.2560 +relevant occurrence of .* (i.e. one which might indicate anchoring or forcing
  1.2561 +the match to follow \n) will appear inside brackets with a number greater than
  1.2562 +31, but if it does, any back reference > 31 suppresses the optimization.
  1.2563 +
  1.2564 +40. Added a new compile-time option PCRE_NO_AUTO_CAPTURE. This has the effect
  1.2565 +of disabling numbered capturing parentheses. Any opening parenthesis that is
  1.2566 +not followed by ? behaves as if it were followed by ?: but named parentheses
  1.2567 +can still be used for capturing (and they will acquire numbers in the usual
  1.2568 +way).
  1.2569 +
  1.2570 +41. Redesigned the return codes from the match() function into yes/no/error so
  1.2571 +that errors can be passed back from deep inside the nested calls. A malloc
  1.2572 +failure while inside a recursive subpattern call now causes the
  1.2573 +PCRE_ERROR_NOMEMORY return instead of quietly going wrong.
  1.2574 +
  1.2575 +42. It is now possible to set a limit on the number of times the match()
  1.2576 +function is called in a call to pcre_exec(). This facility makes it possible to
  1.2577 +limit the amount of recursion and backtracking, though not in a directly
  1.2578 +obvious way, because the match() function is used in a number of different
  1.2579 +circumstances. The count starts from zero for each position in the subject
  1.2580 +string (for non-anchored patterns). The default limit is, for compatibility, a
  1.2581 +large number, namely 10 000 000. You can change this in two ways:
  1.2582 +
  1.2583 +(a) When configuring PCRE before making, you can use --with-match-limit=n
  1.2584 +    to set a default value for the compiled library.
  1.2585 +
  1.2586 +(b) For each call to pcre_exec(), you can pass a pcre_extra block in which
  1.2587 +    a different value is set. See 45 below.
  1.2588 +
  1.2589 +If the limit is exceeded, pcre_exec() returns PCRE_ERROR_MATCHLIMIT.
  1.2590 +
  1.2591 +43. Added a new function pcre_config(int, void *) to enable run-time extraction
  1.2592 +of things that can be changed at compile time. The first argument specifies
  1.2593 +what is wanted and the second points to where the information is to be placed.
  1.2594 +The current list of available information is:
  1.2595 +
  1.2596 +  PCRE_CONFIG_UTF8
  1.2597 +
  1.2598 +The output is an integer that is set to one if UTF-8 support is available;
  1.2599 +otherwise it is set to zero.
  1.2600 +
  1.2601 +  PCRE_CONFIG_NEWLINE
  1.2602 +
  1.2603 +The output is an integer that it set to the value of the code that is used for
  1.2604 +newline. It is either LF (10) or CR (13).
  1.2605 +
  1.2606 +  PCRE_CONFIG_LINK_SIZE
  1.2607 +
  1.2608 +The output is an integer that contains the number of bytes used for internal
  1.2609 +linkage in compiled expressions. The value is 2, 3, or 4. See item 32 above.
  1.2610 +
  1.2611 +  PCRE_CONFIG_POSIX_MALLOC_THRESHOLD
  1.2612 +
  1.2613 +The output is an integer that contains the threshold above which the POSIX
  1.2614 +interface uses malloc() for output vectors. See item 31 above.
  1.2615 +
  1.2616 +  PCRE_CONFIG_MATCH_LIMIT
  1.2617 +
  1.2618 +The output is an unsigned integer that contains the default limit of the number
  1.2619 +of match() calls in a pcre_exec() execution. See 42 above.
  1.2620 +
  1.2621 +44. pcretest has been upgraded by the addition of the -C option. This causes it
  1.2622 +to extract all the available output from the new pcre_config() function, and to
  1.2623 +output it. The program then exits immediately.
  1.2624 +
  1.2625 +45. A need has arisen to pass over additional data with calls to pcre_exec() in
  1.2626 +order to support additional features. One way would have been to define
  1.2627 +pcre_exec2() (for example) with extra arguments, but this would not have been
  1.2628 +extensible, and would also have required all calls to the original function to
  1.2629 +be mapped to the new one. Instead, I have chosen to extend the mechanism that
  1.2630 +is used for passing in "extra" data from pcre_study().
  1.2631 +
  1.2632 +The pcre_extra structure is now exposed and defined in pcre.h. It currently
  1.2633 +contains the following fields:
  1.2634 +
  1.2635 +  flags         a bitmap indicating which of the following fields are set
  1.2636 +  study_data    opaque data from pcre_study()
  1.2637 +  match_limit   a way of specifying a limit on match() calls for a specific
  1.2638 +                  call to pcre_exec()
  1.2639 +  callout_data  data for callouts (see 49 below)
  1.2640 +
  1.2641 +The flag bits are also defined in pcre.h, and are
  1.2642 +
  1.2643 +  PCRE_EXTRA_STUDY_DATA
  1.2644 +  PCRE_EXTRA_MATCH_LIMIT
  1.2645 +  PCRE_EXTRA_CALLOUT_DATA
  1.2646 +
  1.2647 +The pcre_study() function now returns one of these new pcre_extra blocks, with
  1.2648 +the actual study data pointed to by the study_data field, and the
  1.2649 +PCRE_EXTRA_STUDY_DATA flag set. This can be passed directly to pcre_exec() as
  1.2650 +before. That is, this change is entirely upwards-compatible and requires no
  1.2651 +change to existing code.
  1.2652 +
  1.2653 +If you want to pass in additional data to pcre_exec(), you can either place it
  1.2654 +in a pcre_extra block provided by pcre_study(), or create your own pcre_extra
  1.2655 +block.
  1.2656 +
  1.2657 +46. pcretest has been extended to test the PCRE_EXTRA_MATCH_LIMIT feature. If a
  1.2658 +data string contains the escape sequence \M, pcretest calls pcre_exec() several
  1.2659 +times with different match limits, until it finds the minimum value needed for
  1.2660 +pcre_exec() to complete. The value is then output. This can be instructive; for
  1.2661 +most simple matches the number is quite small, but for pathological cases it
  1.2662 +gets very large very quickly.
  1.2663 +
  1.2664 +47. There's a new option for pcre_fullinfo() called PCRE_INFO_STUDYSIZE. It
  1.2665 +returns the size of the data block pointed to by the study_data field in a
  1.2666 +pcre_extra block, that is, the value that was passed as the argument to
  1.2667 +pcre_malloc() when PCRE was getting memory in which to place the information
  1.2668 +created by pcre_study(). The fourth argument should point to a size_t variable.
  1.2669 +pcretest has been extended so that this information is shown after a successful
  1.2670 +pcre_study() call when information about the compiled regex is being displayed.
  1.2671 +
  1.2672 +48. Cosmetic change to Makefile: there's no need to have / after $(DESTDIR)
  1.2673 +because what follows is always an absolute path. (Later: it turns out that this
  1.2674 +is more than cosmetic for MinGW, because it doesn't like empty path
  1.2675 +components.)
  1.2676 +
  1.2677 +49. Some changes have been made to the callout feature (see 28 above):
  1.2678 +
  1.2679 +(i)  A callout function now has three choices for what it returns:
  1.2680 +
  1.2681 +       0  =>  success, carry on matching
  1.2682 +     > 0  =>  failure at this point, but backtrack if possible
  1.2683 +     < 0  =>  serious error, return this value from pcre_exec()
  1.2684 +
  1.2685 +     Negative values should normally be chosen from the set of PCRE_ERROR_xxx
  1.2686 +     values. In particular, returning PCRE_ERROR_NOMATCH forces a standard
  1.2687 +     "match failed" error. The error number PCRE_ERROR_CALLOUT is reserved for
  1.2688 +     use by callout functions. It will never be used by PCRE itself.
  1.2689 +
  1.2690 +(ii) The pcre_extra structure (see 45 above) has a void * field called
  1.2691 +     callout_data, with corresponding flag bit PCRE_EXTRA_CALLOUT_DATA. The
  1.2692 +     pcre_callout_block structure has a field of the same name. The contents of
  1.2693 +     the field passed in the pcre_extra structure are passed to the callout
  1.2694 +     function in the corresponding field in the callout block. This makes it
  1.2695 +     easier to use the same callout-containing regex from multiple threads. For
  1.2696 +     testing, the pcretest program has a new data escape
  1.2697 +
  1.2698 +       \C*n        pass the number n (may be negative) as callout_data
  1.2699 +
  1.2700 +     If the callout function in pcretest receives a non-zero value as
  1.2701 +     callout_data, it returns that value.
  1.2702 +
  1.2703 +50. Makefile wasn't handling CFLAGS properly when compiling dftables. Also,
  1.2704 +there were some redundant $(CFLAGS) in commands that are now specified as
  1.2705 +$(LINK), which already includes $(CFLAGS).
  1.2706 +
  1.2707 +51. Extensions to UTF-8 support are listed below. These all apply when (a) PCRE
  1.2708 +has been compiled with UTF-8 support *and* pcre_compile() has been compiled
  1.2709 +with the PCRE_UTF8 flag. Patterns that are compiled without that flag assume
  1.2710 +one-byte characters throughout. Note that case-insensitive matching applies
  1.2711 +only to characters whose values are less than 256. PCRE doesn't support the
  1.2712 +notion of cases for higher-valued characters.
  1.2713 +
  1.2714 +(i)   A character class whose characters are all within 0-255 is handled as
  1.2715 +      a bit map, and the map is inverted for negative classes. Previously, a
  1.2716 +      character > 255 always failed to match such a class; however it should
  1.2717 +      match if the class was a negative one (e.g. [^ab]). This has been fixed.
  1.2718 +
  1.2719 +(ii)  A negated character class with a single character < 255 is coded as
  1.2720 +      "not this character" (OP_NOT). This wasn't working properly when the test
  1.2721 +      character was multibyte, either singly or repeated.
  1.2722 +
  1.2723 +(iii) Repeats of multibyte characters are now handled correctly in UTF-8
  1.2724 +      mode, for example: \x{100}{2,3}.
  1.2725 +
  1.2726 +(iv)  The character escapes \b, \B, \d, \D, \s, \S, \w, and \W (either
  1.2727 +      singly or repeated) now correctly test multibyte characters. However,
  1.2728 +      PCRE doesn't recognize any characters with values greater than 255 as
  1.2729 +      digits, spaces, or word characters. Such characters always match \D, \S,
  1.2730 +      and \W, and never match \d, \s, or \w.
  1.2731 +
  1.2732 +(v)   Classes may now contain characters and character ranges with values
  1.2733 +      greater than 255. For example: [ab\x{100}-\x{400}].
  1.2734 +
  1.2735 +(vi)  pcregrep now has a --utf-8 option (synonym -u) which makes it call
  1.2736 +      PCRE in UTF-8 mode.
  1.2737 +
  1.2738 +52. The info request value PCRE_INFO_FIRSTCHAR has been renamed
  1.2739 +PCRE_INFO_FIRSTBYTE because it is a byte value. However, the old name is
  1.2740 +retained for backwards compatibility. (Note that LASTLITERAL is also a byte
  1.2741 +value.)
  1.2742 +
  1.2743 +53. The single man page has become too large. I have therefore split it up into
  1.2744 +a number of separate man pages. These also give rise to individual HTML pages;
  1.2745 +these are now put in a separate directory, and there is an index.html page that
  1.2746 +lists them all. Some hyperlinking between the pages has been installed.
  1.2747 +
  1.2748 +54. Added convenience functions for handling named capturing parentheses.
  1.2749 +
  1.2750 +55. Unknown escapes inside character classes (e.g. [\M]) and escapes that
  1.2751 +aren't interpreted therein (e.g. [\C]) are literals in Perl. This is now also
  1.2752 +true in PCRE, except when the PCRE_EXTENDED option is set, in which case they
  1.2753 +are faulted.
  1.2754 +
  1.2755 +56. Introduced HOST_CC and HOST_CFLAGS which can be set in the environment when
  1.2756 +calling configure. These values are used when compiling the dftables.c program
  1.2757 +which is run to generate the source of the default character tables. They
  1.2758 +default to the values of CC and CFLAGS. If you are cross-compiling PCRE,
  1.2759 +you will need to set these values.
  1.2760 +
  1.2761 +57. Updated the building process for Windows DLL, as provided by Fred Cox.
  1.2762 +
  1.2763 +
  1.2764 +Version 3.9 02-Jan-02
  1.2765 +---------------------
  1.2766 +
  1.2767 +1. A bit of extraneous text had somehow crept into the pcregrep documentation.
  1.2768 +
  1.2769 +2. If --disable-static was given, the building process failed when trying to
  1.2770 +build pcretest and pcregrep. (For some reason it was using libtool to compile
  1.2771 +them, which is not right, as they aren't part of the library.)
  1.2772 +
  1.2773 +
  1.2774 +Version 3.8 18-Dec-01
  1.2775 +---------------------
  1.2776 +
  1.2777 +1. The experimental UTF-8 code was completely screwed up. It was packing the
  1.2778 +bytes in the wrong order. How dumb can you get?
  1.2779 +
  1.2780 +
  1.2781 +Version 3.7 29-Oct-01
  1.2782 +---------------------
  1.2783 +
  1.2784 +1. In updating pcretest to check change 1 of version 3.6, I screwed up.
  1.2785 +This caused pcretest, when used on the test data, to segfault. Unfortunately,
  1.2786 +this didn't happen under Solaris 8, where I normally test things.
  1.2787 +
  1.2788 +2. The Makefile had to be changed to make it work on BSD systems, where 'make'
  1.2789 +doesn't seem to recognize that ./xxx and xxx are the same file. (This entry
  1.2790 +isn't in ChangeLog distributed with 3.7 because I forgot when I hastily made
  1.2791 +this fix an hour or so after the initial 3.7 release.)
  1.2792 +
  1.2793 +
  1.2794 +Version 3.6 23-Oct-01
  1.2795 +---------------------
  1.2796 +
  1.2797 +1. Crashed with /(sens|respons)e and \1ibility/ and "sense and sensibility" if
  1.2798 +offsets passed as NULL with zero offset count.
  1.2799 +
  1.2800 +2. The config.guess and config.sub files had not been updated when I moved to
  1.2801 +the latest autoconf.
  1.2802 +
  1.2803 +
  1.2804 +Version 3.5 15-Aug-01
  1.2805 +---------------------
  1.2806 +
  1.2807 +1. Added some missing #if !defined NOPOSIX conditionals in pcretest.c that
  1.2808 +had been forgotten.
  1.2809 +
  1.2810 +2. By using declared but undefined structures, we can avoid using "void"
  1.2811 +definitions in pcre.h while keeping the internal definitions of the structures
  1.2812 +private.
  1.2813 +
  1.2814 +3. The distribution is now built using autoconf 2.50 and libtool 1.4. From a
  1.2815 +user point of view, this means that both static and shared libraries are built
  1.2816 +by default, but this can be individually controlled. More of the work of
  1.2817 +handling this static/shared cases is now inside libtool instead of PCRE's make
  1.2818 +file.
  1.2819 +
  1.2820 +4. The pcretest utility is now installed along with pcregrep because it is
  1.2821 +useful for users (to test regexs) and by doing this, it automatically gets
  1.2822 +relinked by libtool. The documentation has been turned into a man page, so
  1.2823 +there are now .1, .txt, and .html versions in /doc.
  1.2824 +
  1.2825 +5. Upgrades to pcregrep:
  1.2826 +   (i)   Added long-form option names like gnu grep.
  1.2827 +   (ii)  Added --help to list all options with an explanatory phrase.
  1.2828 +   (iii) Added -r, --recursive to recurse into sub-directories.
  1.2829 +   (iv)  Added -f, --file to read patterns from a file.
  1.2830 +
  1.2831 +6. pcre_exec() was referring to its "code" argument before testing that
  1.2832 +argument for NULL (and giving an error if it was NULL).
  1.2833 +
  1.2834 +7. Upgraded Makefile.in to allow for compiling in a different directory from
  1.2835 +the source directory.
  1.2836 +
  1.2837 +8. Tiny buglet in pcretest: when pcre_fullinfo() was called to retrieve the
  1.2838 +options bits, the pointer it was passed was to an int instead of to an unsigned
  1.2839 +long int. This mattered only on 64-bit systems.
  1.2840 +
  1.2841 +9. Fixed typo (3.4/1) in pcre.h again. Sigh. I had changed pcre.h (which is
  1.2842 +generated) instead of pcre.in, which it its source. Also made the same change
  1.2843 +in several of the .c files.
  1.2844 +
  1.2845 +10. A new release of gcc defines printf() as a macro, which broke pcretest
  1.2846 +because it had an ifdef in the middle of a string argument for printf(). Fixed
  1.2847 +by using separate calls to printf().
  1.2848 +
  1.2849 +11. Added --enable-newline-is-cr and --enable-newline-is-lf to the configure
  1.2850 +script, to force use of CR or LF instead of \n in the source. On non-Unix
  1.2851 +systems, the value can be set in config.h.
  1.2852 +
  1.2853 +12. The limit of 200 on non-capturing parentheses is a _nesting_ limit, not an
  1.2854 +absolute limit. Changed the text of the error message to make this clear, and
  1.2855 +likewise updated the man page.
  1.2856 +
  1.2857 +13. The limit of 99 on the number of capturing subpatterns has been removed.
  1.2858 +The new limit is 65535, which I hope will not be a "real" limit.
  1.2859 +
  1.2860 +
  1.2861 +Version 3.4 22-Aug-00
  1.2862 +---------------------
  1.2863 +
  1.2864 +1. Fixed typo in pcre.h: unsigned const char * changed to const unsigned char *.
  1.2865 +
  1.2866 +2. Diagnose condition (?(0) as an error instead of crashing on matching.
  1.2867 +
  1.2868 +
  1.2869 +Version 3.3 01-Aug-00
  1.2870 +---------------------
  1.2871 +
  1.2872 +1. If an octal character was given, but the value was greater than \377, it
  1.2873 +was not getting masked to the least significant bits, as documented. This could
  1.2874 +lead to crashes in some systems.
  1.2875 +
  1.2876 +2. Perl 5.6 (if not earlier versions) accepts classes like [a-\d] and treats
  1.2877 +the hyphen as a literal. PCRE used to give an error; it now behaves like Perl.
  1.2878 +
  1.2879 +3. Added the functions pcre_free_substring() and pcre_free_substring_list().
  1.2880 +These just pass their arguments on to (pcre_free)(), but they are provided
  1.2881 +because some uses of PCRE bind it to non-C systems that can call its functions,
  1.2882 +but cannot call free() or pcre_free() directly.
  1.2883 +
  1.2884 +4. Add "make test" as a synonym for "make check". Corrected some comments in
  1.2885 +the Makefile.
  1.2886 +
  1.2887 +5. Add $(DESTDIR)/ in front of all the paths in the "install" target in the
  1.2888 +Makefile.
  1.2889 +
  1.2890 +6. Changed the name of pgrep to pcregrep, because Solaris has introduced a
  1.2891 +command called pgrep for grepping around the active processes.
  1.2892 +
  1.2893 +7. Added the beginnings of support for UTF-8 character strings.
  1.2894 +
  1.2895 +8. Arranged for the Makefile to pass over the settings of CC, CFLAGS, and
  1.2896 +RANLIB to ./ltconfig so that they are used by libtool. I think these are all
  1.2897 +the relevant ones. (AR is not passed because ./ltconfig does its own figuring
  1.2898 +out for the ar command.)
  1.2899 +
  1.2900 +
  1.2901 +Version 3.2 12-May-00
  1.2902 +---------------------
  1.2903 +
  1.2904 +This is purely a bug fixing release.
  1.2905 +
  1.2906 +1. If the pattern /((Z)+|A)*/ was matched agained ZABCDEFG it matched Z instead
  1.2907 +of ZA. This was just one example of several cases that could provoke this bug,
  1.2908 +which was introduced by change 9 of version 2.00. The code for breaking
  1.2909 +infinite loops after an iteration that matches an empty string was't working
  1.2910 +correctly.
  1.2911 +
  1.2912 +2. The pcretest program was not imitating Perl correctly for the pattern /a*/g
  1.2913 +when matched against abbab (for example). After matching an empty string, it
  1.2914 +wasn't forcing anchoring when setting PCRE_NOTEMPTY for the next attempt; this
  1.2915 +caused it to match further down the string than it should.
  1.2916 +
  1.2917 +3. The code contained an inclusion of sys/types.h. It isn't clear why this
  1.2918 +was there because it doesn't seem to be needed, and it causes trouble on some
  1.2919 +systems, as it is not a Standard C header. It has been removed.
  1.2920 +
  1.2921 +4. Made 4 silly changes to the source to avoid stupid compiler warnings that
  1.2922 +were reported on the Macintosh. The changes were from
  1.2923 +
  1.2924 +  while ((c = *(++ptr)) != 0 && c != '\n');
  1.2925 +to
  1.2926 +  while ((c = *(++ptr)) != 0 && c != '\n') ;
  1.2927 +
  1.2928 +Totally extraordinary, but if that's what it takes...
  1.2929 +
  1.2930 +5. PCRE is being used in one environment where neither memmove() nor bcopy() is
  1.2931 +available. Added HAVE_BCOPY and an autoconf test for it; if neither
  1.2932 +HAVE_MEMMOVE nor HAVE_BCOPY is set, use a built-in emulation function which
  1.2933 +assumes the way PCRE uses memmove() (always moving upwards).
  1.2934 +
  1.2935 +6. PCRE is being used in one environment where strchr() is not available. There
  1.2936 +was only one use in pcre.c, and writing it out to avoid strchr() probably gives
  1.2937 +faster code anyway.
  1.2938 +
  1.2939 +
  1.2940 +Version 3.1 09-Feb-00
  1.2941 +---------------------
  1.2942 +
  1.2943 +The only change in this release is the fixing of some bugs in Makefile.in for
  1.2944 +the "install" target:
  1.2945 +
  1.2946 +(1) It was failing to install pcreposix.h.
  1.2947 +
  1.2948 +(2) It was overwriting the pcre.3 man page with the pcreposix.3 man page.
  1.2949 +
  1.2950 +
  1.2951 +Version 3.0 01-Feb-00
  1.2952 +---------------------
  1.2953 +
  1.2954 +1. Add support for the /+ modifier to perltest (to output $` like it does in
  1.2955 +pcretest).
  1.2956 +
  1.2957 +2. Add support for the /g modifier to perltest.
  1.2958 +
  1.2959 +3. Fix pcretest so that it behaves even more like Perl for /g when the pattern
  1.2960 +matches null strings.
  1.2961 +
  1.2962 +4. Fix perltest so that it doesn't do unwanted things when fed an empty
  1.2963 +pattern. Perl treats empty patterns specially - it reuses the most recent
  1.2964 +pattern, which is not what we want. Replace // by /(?#)/ in order to avoid this
  1.2965 +effect.
  1.2966 +
  1.2967 +5. The POSIX interface was broken in that it was just handing over the POSIX
  1.2968 +captured string vector to pcre_exec(), but (since release 2.00) PCRE has
  1.2969 +required a bigger vector, with some working space on the end. This means that
  1.2970 +the POSIX wrapper now has to get and free some memory, and copy the results.
  1.2971 +
  1.2972 +6. Added some simple autoconf support, placing the test data and the
  1.2973 +documentation in separate directories, re-organizing some of the
  1.2974 +information files, and making it build pcre-config (a GNU standard). Also added
  1.2975 +libtool support for building PCRE as a shared library, which is now the
  1.2976 +default.
  1.2977 +
  1.2978 +7. Got rid of the leading zero in the definition of PCRE_MINOR because 08 and
  1.2979 +09 are not valid octal constants. Single digits will be used for minor values
  1.2980 +less than 10.
  1.2981 +
  1.2982 +8. Defined REG_EXTENDED and REG_NOSUB as zero in the POSIX header, so that
  1.2983 +existing programs that set these in the POSIX interface can use PCRE without
  1.2984 +modification.
  1.2985 +
  1.2986 +9. Added a new function, pcre_fullinfo() with an extensible interface. It can
  1.2987 +return all that pcre_info() returns, plus additional data. The pcre_info()
  1.2988 +function is retained for compatibility, but is considered to be obsolete.
  1.2989 +
  1.2990 +10. Added experimental recursion feature (?R) to handle one common case that
  1.2991 +Perl 5.6 will be able to do with (?p{...}).
  1.2992 +
  1.2993 +11. Added support for POSIX character classes like [:alpha:], which Perl is
  1.2994 +adopting.
  1.2995 +
  1.2996 +
  1.2997 +Version 2.08 31-Aug-99
  1.2998 +----------------------
  1.2999 +
  1.3000 +1. When startoffset was not zero and the pattern began with ".*", PCRE was not
  1.3001 +trying to match at the startoffset position, but instead was moving forward to
  1.3002 +the next newline as if a previous match had failed.
  1.3003 +
  1.3004 +2. pcretest was not making use of PCRE_NOTEMPTY when repeating for /g and /G,
  1.3005 +and could get into a loop if a null string was matched other than at the start
  1.3006 +of the subject.
  1.3007 +
  1.3008 +3. Added definitions of PCRE_MAJOR and PCRE_MINOR to pcre.h so the version can
  1.3009 +be distinguished at compile time, and for completeness also added PCRE_DATE.
  1.3010 +
  1.3011 +5. Added Paul Sokolovsky's minor changes to make it easy to compile a Win32 DLL
  1.3012 +in GnuWin32 environments.
  1.3013 +
  1.3014 +
  1.3015 +Version 2.07 29-Jul-99
  1.3016 +----------------------
  1.3017 +
  1.3018 +1. The documentation is now supplied in plain text form and HTML as well as in
  1.3019 +the form of man page sources.
  1.3020 +
  1.3021 +2. C++ compilers don't like assigning (void *) values to other pointer types.
  1.3022 +In particular this affects malloc(). Although there is no problem in Standard
  1.3023 +C, I've put in casts to keep C++ compilers happy.
  1.3024 +
  1.3025 +3. Typo on pcretest.c; a cast of (unsigned char *) in the POSIX regexec() call
  1.3026 +should be (const char *).
  1.3027 +
  1.3028 +4. If NOPOSIX is defined, pcretest.c compiles without POSIX support. This may
  1.3029 +be useful for non-Unix systems who don't want to bother with the POSIX stuff.
  1.3030 +However, I haven't made this a standard facility. The documentation doesn't
  1.3031 +mention it, and the Makefile doesn't support it.
  1.3032 +
  1.3033 +5. The Makefile now contains an "install" target, with editable destinations at
  1.3034 +the top of the file. The pcretest program is not installed.
  1.3035 +
  1.3036 +6. pgrep -V now gives the PCRE version number and date.
  1.3037 +
  1.3038 +7. Fixed bug: a zero repetition after a literal string (e.g. /abcde{0}/) was
  1.3039 +causing the entire string to be ignored, instead of just the last character.
  1.3040 +
  1.3041 +8. If a pattern like /"([^\\"]+|\\.)*"/ is applied in the normal way to a
  1.3042 +non-matching string, it can take a very, very long time, even for strings of
  1.3043 +quite modest length, because of the nested recursion. PCRE now does better in
  1.3044 +some of these cases. It does this by remembering the last required literal
  1.3045 +character in the pattern, and pre-searching the subject to ensure it is present
  1.3046 +before running the real match. In other words, it applies a heuristic to detect
  1.3047 +some types of certain failure quickly, and in the above example, if presented
  1.3048 +with a string that has no trailing " it gives "no match" very quickly.
  1.3049 +
  1.3050 +9. A new runtime option PCRE_NOTEMPTY causes null string matches to be ignored;
  1.3051 +other alternatives are tried instead.
  1.3052 +
  1.3053 +
  1.3054 +Version 2.06 09-Jun-99
  1.3055 +----------------------
  1.3056 +
  1.3057 +1. Change pcretest's output for amount of store used to show just the code
  1.3058 +space, because the remainder (the data block) varies in size between 32-bit and
  1.3059 +64-bit systems.
  1.3060 +
  1.3061 +2. Added an extra argument to pcre_exec() to supply an offset in the subject to
  1.3062 +start matching at. This allows lookbehinds to work when searching for multiple
  1.3063 +occurrences in a string.
  1.3064 +
  1.3065 +3. Added additional options to pcretest for testing multiple occurrences:
  1.3066 +
  1.3067 +   /+   outputs the rest of the string that follows a match
  1.3068 +   /g   loops for multiple occurrences, using the new startoffset argument
  1.3069 +   /G   loops for multiple occurrences by passing an incremented pointer
  1.3070 +
  1.3071 +4. PCRE wasn't doing the "first character" optimization for patterns starting
  1.3072 +with \b or \B, though it was doing it for other lookbehind assertions. That is,
  1.3073 +it wasn't noticing that a match for a pattern such as /\bxyz/ has to start with
  1.3074 +the letter 'x'. On long subject strings, this gives a significant speed-up.
  1.3075 +
  1.3076 +
  1.3077 +Version 2.05 21-Apr-99
  1.3078 +----------------------
  1.3079 +
  1.3080 +1. Changed the type of magic_number from int to long int so that it works
  1.3081 +properly on 16-bit systems.
  1.3082 +
  1.3083 +2. Fixed a bug which caused patterns starting with .* not to work correctly
  1.3084 +when the subject string contained newline characters. PCRE was assuming
  1.3085 +anchoring for such patterns in all cases, which is not correct because .* will
  1.3086 +not pass a newline unless PCRE_DOTALL is set. It now assumes anchoring only if
  1.3087 +DOTALL is set at top level; otherwise it knows that patterns starting with .*
  1.3088 +must be retried after every newline in the subject.
  1.3089 +
  1.3090 +
  1.3091 +Version 2.04 18-Feb-99
  1.3092 +----------------------
  1.3093 +
  1.3094 +1. For parenthesized subpatterns with repeats whose minimum was zero, the
  1.3095 +computation of the store needed to hold the pattern was incorrect (too large).
  1.3096 +If such patterns were nested a few deep, this could multiply and become a real
  1.3097 +problem.
  1.3098 +
  1.3099 +2. Added /M option to pcretest to show the memory requirement of a specific
  1.3100 +pattern. Made -m a synonym of -s (which does this globally) for compatibility.
  1.3101 +
  1.3102 +3. Subpatterns of the form (regex){n,m} (i.e. limited maximum) were being
  1.3103 +compiled in such a way that the backtracking after subsequent failure was
  1.3104 +pessimal. Something like (a){0,3} was compiled as (a)?(a)?(a)? instead of
  1.3105 +((a)((a)(a)?)?)? with disastrous performance if the maximum was of any size.
  1.3106 +
  1.3107 +
  1.3108 +Version 2.03 02-Feb-99
  1.3109 +----------------------
  1.3110 +
  1.3111 +1. Fixed typo and small mistake in man page.
  1.3112 +
  1.3113 +2. Added 4th condition (GPL supersedes if conflict) and created separate
  1.3114 +LICENCE file containing the conditions.
  1.3115 +
  1.3116 +3. Updated pcretest so that patterns such as /abc\/def/ work like they do in
  1.3117 +Perl, that is the internal \ allows the delimiter to be included in the
  1.3118 +pattern. Locked out the use of \ as a delimiter. If \ immediately follows
  1.3119 +the final delimiter, add \ to the end of the pattern (to test the error).
  1.3120 +
  1.3121 +4. Added the convenience functions for extracting substrings after a successful
  1.3122 +match. Updated pcretest to make it able to test these functions.
  1.3123 +
  1.3124 +
  1.3125 +Version 2.02 14-Jan-99
  1.3126 +----------------------
  1.3127 +
  1.3128 +1. Initialized the working variables associated with each extraction so that
  1.3129 +their saving and restoring doesn't refer to uninitialized store.
  1.3130 +
  1.3131 +2. Put dummy code into study.c in order to trick the optimizer of the IBM C
  1.3132 +compiler for OS/2 into generating correct code. Apparently IBM isn't going to
  1.3133 +fix the problem.
  1.3134 +
  1.3135 +3. Pcretest: the timing code wasn't using LOOPREPEAT for timing execution
  1.3136 +calls, and wasn't printing the correct value for compiling calls. Increased the
  1.3137 +default value of LOOPREPEAT, and the number of significant figures in the
  1.3138 +times.
  1.3139 +
  1.3140 +4. Changed "/bin/rm" in the Makefile to "-rm" so it works on Windows NT.
  1.3141 +
  1.3142 +5. Renamed "deftables" as "dftables" to get it down to 8 characters, to avoid
  1.3143 +a building problem on Windows NT with a FAT file system.
  1.3144 +
  1.3145 +
  1.3146 +Version 2.01 21-Oct-98
  1.3147 +----------------------
  1.3148 +
  1.3149 +1. Changed the API for pcre_compile() to allow for the provision of a pointer
  1.3150 +to character tables built by pcre_maketables() in the current locale. If NULL
  1.3151 +is passed, the default tables are used.
  1.3152 +
  1.3153 +
  1.3154 +Version 2.00 24-Sep-98
  1.3155 +----------------------
  1.3156 +
  1.3157 +1. Since the (>?) facility is in Perl 5.005, don't require PCRE_EXTRA to enable
  1.3158 +it any more.
  1.3159 +
  1.3160 +2. Allow quantification of (?>) groups, and make it work correctly.
  1.3161 +
  1.3162 +3. The first character computation wasn't working for (?>) groups.
  1.3163 +
  1.3164 +4. Correct the implementation of \Z (it is permitted to match on the \n at the
  1.3165 +end of the subject) and add 5.005's \z, which really does match only at the
  1.3166 +very end of the subject.
  1.3167 +
  1.3168 +5. Remove the \X "cut" facility; Perl doesn't have it, and (?> is neater.
  1.3169 +
  1.3170 +6. Remove the ability to specify CASELESS, MULTILINE, DOTALL, and
  1.3171 +DOLLAR_END_ONLY at runtime, to make it possible to implement the Perl 5.005
  1.3172 +localized options. All options to pcre_study() were also removed.
  1.3173 +
  1.3174 +7. Add other new features from 5.005:
  1.3175 +
  1.3176 +   $(?<=           positive lookbehind
  1.3177 +   $(?<!           negative lookbehind
  1.3178 +   (?imsx-imsx)    added the unsetting capability
  1.3179 +                   such a setting is global if at outer level; local otherwise
  1.3180 +   (?imsx-imsx:)   non-capturing groups with option setting
  1.3181 +   (?(cond)re|re)  conditional pattern matching
  1.3182 +
  1.3183 +   A backreference to itself in a repeated group matches the previous
  1.3184 +   captured string.
  1.3185 +
  1.3186 +8. General tidying up of studying (both automatic and via "study")
  1.3187 +consequential on the addition of new assertions.
  1.3188 +
  1.3189 +9. As in 5.005, unlimited repeated groups that could match an empty substring
  1.3190 +are no longer faulted at compile time. Instead, the loop is forcibly broken at
  1.3191 +runtime if any iteration does actually match an empty substring.
  1.3192 +
  1.3193 +10. Include the RunTest script in the distribution.
  1.3194 +
  1.3195 +11. Added tests from the Perl 5.005_02 distribution. This showed up a few
  1.3196 +discrepancies, some of which were old and were also with respect to 5.004. They
  1.3197 +have now been fixed.
  1.3198 +
  1.3199 +
  1.3200 +Version 1.09 28-Apr-98
  1.3201 +----------------------
  1.3202 +
  1.3203 +1. A negated single character class followed by a quantifier with a minimum
  1.3204 +value of one (e.g.  [^x]{1,6}  ) was not compiled correctly. This could lead to
  1.3205 +program crashes, or just wrong answers. This did not apply to negated classes
  1.3206 +containing more than one character, or to minima other than one.
  1.3207 +
  1.3208 +
  1.3209 +Version 1.08 27-Mar-98
  1.3210 +----------------------
  1.3211 +
  1.3212 +1. Add PCRE_UNGREEDY to invert the greediness of quantifiers.
  1.3213 +
  1.3214 +2. Add (?U) and (?X) to set PCRE_UNGREEDY and PCRE_EXTRA respectively. The
  1.3215 +latter must appear before anything that relies on it in the pattern.
  1.3216 +
  1.3217 +
  1.3218 +Version 1.07 16-Feb-98
  1.3219 +----------------------
  1.3220 +
  1.3221 +1. A pattern such as /((a)*)*/ was not being diagnosed as in error (unlimited
  1.3222 +repeat of a potentially empty string).
  1.3223 +
  1.3224 +
  1.3225 +Version 1.06 23-Jan-98
  1.3226 +----------------------
  1.3227 +
  1.3228 +1. Added Markus Oberhumer's little patches for C++.
  1.3229 +
  1.3230 +2. Literal strings longer than 255 characters were broken.
  1.3231 +
  1.3232 +
  1.3233 +Version 1.05 23-Dec-97
  1.3234 +----------------------
  1.3235 +
  1.3236 +1. Negated character classes containing more than one character were failing if
  1.3237 +PCRE_CASELESS was set at run time.
  1.3238 +
  1.3239 +
  1.3240 +Version 1.04 19-Dec-97
  1.3241 +----------------------
  1.3242 +
  1.3243 +1. Corrected the man page, where some "const" qualifiers had been omitted.
  1.3244 +
  1.3245 +2. Made debugging output print "{0,xxx}" instead of just "{,xxx}" to agree with
  1.3246 +input syntax.
  1.3247 +
  1.3248 +3. Fixed memory leak which occurred when a regex with back references was
  1.3249 +matched with an offsets vector that wasn't big enough. The temporary memory
  1.3250 +that is used in this case wasn't being freed if the match failed.
  1.3251 +
  1.3252 +4. Tidied pcretest to ensure it frees memory that it gets.
  1.3253 +
  1.3254 +5. Temporary memory was being obtained in the case where the passed offsets
  1.3255 +vector was exactly big enough.
  1.3256 +
  1.3257 +6. Corrected definition of offsetof() from change 5 below.
  1.3258 +
  1.3259 +7. I had screwed up change 6 below and broken the rules for the use of
  1.3260 +setjmp(). Now fixed.
  1.3261 +
  1.3262 +
  1.3263 +Version 1.03 18-Dec-97
  1.3264 +----------------------
  1.3265 +
  1.3266 +1. A erroneous regex with a missing opening parenthesis was correctly
  1.3267 +diagnosed, but PCRE attempted to access brastack[-1], which could cause crashes
  1.3268 +on some systems.
  1.3269 +
  1.3270 +2. Replaced offsetof(real_pcre, code) by offsetof(real_pcre, code[0]) because
  1.3271 +it was reported that one broken compiler failed on the former because "code" is
  1.3272 +also an independent variable.
  1.3273 +
  1.3274 +3. The erroneous regex a[]b caused an array overrun reference.
  1.3275 +
  1.3276 +4. A regex ending with a one-character negative class (e.g. /[^k]$/) did not
  1.3277 +fail on data ending with that character. (It was going on too far, and checking
  1.3278 +the next character, typically a binary zero.) This was specific to the
  1.3279 +optimized code for single-character negative classes.
  1.3280 +
  1.3281 +5. Added a contributed patch from the TIN world which does the following:
  1.3282 +
  1.3283 +  + Add an undef for memmove, in case the the system defines a macro for it.
  1.3284 +
  1.3285 +  + Add a definition of offsetof(), in case there isn't one. (I don't know
  1.3286 +    the reason behind this - offsetof() is part of the ANSI standard - but
  1.3287 +    it does no harm).
  1.3288 +
  1.3289 +  + Reduce the ifdef's in pcre.c using macro DPRINTF, thereby eliminating
  1.3290 +    most of the places where whitespace preceded '#'. I have given up and
  1.3291 +    allowed the remaining 2 cases to be at the margin.
  1.3292 +
  1.3293 +  + Rename some variables in pcre to eliminate shadowing. This seems very
  1.3294 +    pedantic, but does no harm, of course.
  1.3295 +
  1.3296 +6. Moved the call to setjmp() into its own function, to get rid of warnings
  1.3297 +from gcc -Wall, and avoided calling it at all unless PCRE_EXTRA is used.
  1.3298 +
  1.3299 +7. Constructs such as \d{8,} were compiling into the equivalent of
  1.3300 +\d{8}\d{0,65527} instead of \d{8}\d* which didn't make much difference to the
  1.3301 +outcome, but in this particular case used more store than had been allocated,
  1.3302 +which caused the bug to be discovered because it threw up an internal error.
  1.3303 +
  1.3304 +8. The debugging code in both pcre and pcretest for outputting the compiled
  1.3305 +form of a regex was going wrong in the case of back references followed by
  1.3306 +curly-bracketed repeats.
  1.3307 +
  1.3308 +
  1.3309 +Version 1.02 12-Dec-97
  1.3310 +----------------------
  1.3311 +
  1.3312 +1. Typos in pcre.3 and comments in the source fixed.
  1.3313 +
  1.3314 +2. Applied a contributed patch to get rid of places where it used to remove
  1.3315 +'const' from variables, and fixed some signed/unsigned and uninitialized
  1.3316 +variable warnings.
  1.3317 +
  1.3318 +3. Added the "runtest" target to Makefile.
  1.3319 +
  1.3320 +4. Set default compiler flag to -O2 rather than just -O.
  1.3321 +
  1.3322 +
  1.3323 +Version 1.01 19-Nov-97
  1.3324 +----------------------
  1.3325 +
  1.3326 +1. PCRE was failing to diagnose unlimited repeat of empty string for patterns
  1.3327 +like /([ab]*)*/, that is, for classes with more than one character in them.
  1.3328 +
  1.3329 +2. Likewise, it wasn't diagnosing patterns with "once-only" subpatterns, such
  1.3330 +as /((?>a*))*/ (a PCRE_EXTRA facility).
  1.3331 +
  1.3332 +
  1.3333 +Version 1.00 18-Nov-97
  1.3334 +----------------------
  1.3335 +
  1.3336 +1. Added compile-time macros to support systems such as SunOS4 which don't have
  1.3337 +memmove() or strerror() but have other things that can be used instead.
  1.3338 +
  1.3339 +2. Arranged that "make clean" removes the executables.
  1.3340 +
  1.3341 +
  1.3342 +Version 0.99 27-Oct-97
  1.3343 +----------------------
  1.3344 +
  1.3345 +1. Fixed bug in code for optimizing classes with only one character. It was
  1.3346 +initializing a 32-byte map regardless, which could cause it to run off the end
  1.3347 +of the memory it had got.
  1.3348 +
  1.3349 +2. Added, conditional on PCRE_EXTRA, the proposed (?>REGEX) construction.
  1.3350 +
  1.3351 +
  1.3352 +Version 0.98 22-Oct-97
  1.3353 +----------------------
  1.3354 +
  1.3355 +1. Fixed bug in code for handling temporary memory usage when there are more
  1.3356 +back references than supplied space in the ovector. This could cause segfaults.
  1.3357 +
  1.3358 +
  1.3359 +Version 0.97 21-Oct-97
  1.3360 +----------------------
  1.3361 +
  1.3362 +1. Added the \X "cut" facility, conditional on PCRE_EXTRA.
  1.3363 +
  1.3364 +2. Optimized negated single characters not to use a bit map.
  1.3365 +
  1.3366 +3. Brought error texts together as macro definitions; clarified some of them;
  1.3367 +fixed one that was wrong - it said "range out of order" when it meant "invalid
  1.3368 +escape sequence".
  1.3369 +
  1.3370 +4. Changed some char * arguments to const char *.
  1.3371 +
  1.3372 +5. Added PCRE_NOTBOL and PCRE_NOTEOL (from POSIX).
  1.3373 +
  1.3374 +6. Added the POSIX-style API wrapper in pcreposix.a and testing facilities in
  1.3375 +pcretest.
  1.3376 +
  1.3377 +
  1.3378 +Version 0.96 16-Oct-97
  1.3379 +----------------------
  1.3380 +
  1.3381 +1. Added a simple "pgrep" utility to the distribution.
  1.3382 +
  1.3383 +2. Fixed an incompatibility with Perl: "{" is now treated as a normal character
  1.3384 +unless it appears in one of the precise forms "{ddd}", "{ddd,}", or "{ddd,ddd}"
  1.3385 +where "ddd" means "one or more decimal digits".
  1.3386 +
  1.3387 +3. Fixed serious bug. If a pattern had a back reference, but the call to
  1.3388 +pcre_exec() didn't supply a large enough ovector to record the related
  1.3389 +identifying subpattern, the match always failed. PCRE now remembers the number
  1.3390 +of the largest back reference, and gets some temporary memory in which to save
  1.3391 +the offsets during matching if necessary, in order to ensure that
  1.3392 +backreferences always work.
  1.3393 +
  1.3394 +4. Increased the compatibility with Perl in a number of ways:
  1.3395 +
  1.3396 +  (a) . no longer matches \n by default; an option PCRE_DOTALL is provided
  1.3397 +      to request this handling. The option can be set at compile or exec time.
  1.3398 +
  1.3399 +  (b) $ matches before a terminating newline by default; an option
  1.3400 +      PCRE_DOLLAR_ENDONLY is provided to override this (but not in multiline
  1.3401 +      mode). The option can be set at compile or exec time.
  1.3402 +
  1.3403 +  (c) The handling of \ followed by a digit other than 0 is now supposed to be
  1.3404 +      the same as Perl's. If the decimal number it represents is less than 10
  1.3405 +      or there aren't that many previous left capturing parentheses, an octal
  1.3406 +      escape is read. Inside a character class, it's always an octal escape,
  1.3407 +      even if it is a single digit.
  1.3408 +
  1.3409 +  (d) An escaped but undefined alphabetic character is taken as a literal,
  1.3410 +      unless PCRE_EXTRA is set. Currently this just reserves the remaining
  1.3411 +      escapes.
  1.3412 +
  1.3413 +  (e) {0} is now permitted. (The previous item is removed from the compiled
  1.3414 +      pattern).
  1.3415 +
  1.3416 +5. Changed all the names of code files so that the basic parts are no longer
  1.3417 +than 10 characters, and abolished the teeny "globals.c" file.
  1.3418 +
  1.3419 +6. Changed the handling of character classes; they are now done with a 32-byte
  1.3420 +bit map always.
  1.3421 +
  1.3422 +7. Added the -d and /D options to pcretest to make it possible to look at the
  1.3423 +internals of compilation without having to recompile pcre.
  1.3424 +
  1.3425 +
  1.3426 +Version 0.95 23-Sep-97
  1.3427 +----------------------
  1.3428 +
  1.3429 +1. Fixed bug in pre-pass concerning escaped "normal" characters such as \x5c or
  1.3430 +\x20 at the start of a run of normal characters. These were being treated as
  1.3431 +real characters, instead of the source characters being re-checked.
  1.3432 +
  1.3433 +
  1.3434 +Version 0.94 18-Sep-97
  1.3435 +----------------------
  1.3436 +
  1.3437 +1. The functions are now thread-safe, with the caveat that the global variables
  1.3438 +containing pointers to malloc() and free() or alternative functions are the
  1.3439 +same for all threads.
  1.3440 +
  1.3441 +2. Get pcre_study() to generate a bitmap of initial characters for non-
  1.3442 +anchored patterns when this is possible, and use it if passed to pcre_exec().
  1.3443 +
  1.3444 +
  1.3445 +Version 0.93 15-Sep-97
  1.3446 +----------------------
  1.3447 +
  1.3448 +1. /(b)|(:+)/ was computing an incorrect first character.
  1.3449 +
  1.3450 +2. Add pcre_study() to the API and the passing of pcre_extra to pcre_exec(),
  1.3451 +but not actually doing anything yet.
  1.3452 +
  1.3453 +3. Treat "-" characters in classes that cannot be part of ranges as literals,
  1.3454 +as Perl does (e.g. [-az] or [az-]).
  1.3455 +
  1.3456 +4. Set the anchored flag if a branch starts with .* or .*? because that tests
  1.3457 +all possible positions.
  1.3458 +
  1.3459 +5. Split up into different modules to avoid including unneeded functions in a
  1.3460 +compiled binary. However, compile and exec are still in one module. The "study"
  1.3461 +function is split off.
  1.3462 +
  1.3463 +6. The character tables are now in a separate module whose source is generated
  1.3464 +by an auxiliary program - but can then be edited by hand if required. There are
  1.3465 +now no calls to isalnum(), isspace(), isdigit(), isxdigit(), tolower() or
  1.3466 +toupper() in the code.
  1.3467 +
  1.3468 +7. Turn the malloc/free funtions variables into pcre_malloc and pcre_free and
  1.3469 +make them global. Abolish the function for setting them, as the caller can now
  1.3470 +set them directly.
  1.3471 +
  1.3472 +
  1.3473 +Version 0.92 11-Sep-97
  1.3474 +----------------------
  1.3475 +
  1.3476 +1. A repeat with a fixed maximum and a minimum of 1 for an ordinary character
  1.3477 +(e.g. /a{1,3}/) was broken (I mis-optimized it).
  1.3478 +
  1.3479 +2. Caseless matching was not working in character classes if the characters in
  1.3480 +the pattern were in upper case.
  1.3481 +
  1.3482 +3. Make ranges like [W-c] work in the same way as Perl for caseless matching.
  1.3483 +
  1.3484 +4. Make PCRE_ANCHORED public and accept as a compile option.
  1.3485 +
  1.3486 +5. Add an options word to pcre_exec() and accept PCRE_ANCHORED and
  1.3487 +PCRE_CASELESS at run time. Add escapes \A and \I to pcretest to cause it to
  1.3488 +pass them.
  1.3489 +
  1.3490 +6. Give an error if bad option bits passed at compile or run time.
  1.3491 +
  1.3492 +7. Add PCRE_MULTILINE at compile and exec time, and (?m) as well. Add \M to
  1.3493 +pcretest to cause it to pass that flag.
  1.3494 +
  1.3495 +8. Add pcre_info(), to get the number of identifying subpatterns, the stored
  1.3496 +options, and the first character, if set.
  1.3497 +
  1.3498 +9. Recognize C+ or C{n,m} where n >= 1 as providing a fixed starting character.
  1.3499 +
  1.3500 +
  1.3501 +Version 0.91 10-Sep-97
  1.3502 +----------------------
  1.3503 +
  1.3504 +1. PCRE was failing to diagnose unlimited repeats of subpatterns that could
  1.3505 +match the empty string as in /(a*)*/. It was looping and ultimately crashing.
  1.3506 +
  1.3507 +2. PCRE was looping on encountering an indefinitely repeated back reference to
  1.3508 +a subpattern that had matched an empty string, e.g. /(a|)\1*/. It now does what
  1.3509 +Perl does - treats the match as successful.
  1.3510 +
  1.3511 +****