153e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis/*************************************************
253e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis*      Perl-Compatible Regular Expressions       *
353e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis*************************************************/
453e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis
553e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis/* PCRE is a library of functions to support regular expressions whose syntax
653e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskisand semantics are as close as possible to those of the Perl 5 language.
753e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis
853e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis                       Written by Philip Hazel
953e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis     Original API code Copyright (c) 1997-2012 University of Cambridge
1053e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis         New API code Copyright (c) 2016 University of Cambridge
1153e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis
1253e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis-----------------------------------------------------------------------------
1353e448c1797913dbc12dbacc341559934566d6bcJanis DanisevskisRedistribution and use in source and binary forms, with or without
1453e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskismodification, are permitted provided that the following conditions are met:
1553e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis
1653e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis    * Redistributions of source code must retain the above copyright notice,
1753e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis      this list of conditions and the following disclaimer.
1853e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis
1953e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis    * Redistributions in binary form must reproduce the above copyright
2053e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis      notice, this list of conditions and the following disclaimer in the
2153e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis      documentation and/or other materials provided with the distribution.
2253e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis
2353e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis    * Neither the name of the University of Cambridge nor the names of its
2453e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis      contributors may be used to endorse or promote products derived from
2553e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis      this software without specific prior written permission.
2653e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis
2753e448c1797913dbc12dbacc341559934566d6bcJanis DanisevskisTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
2853e448c1797913dbc12dbacc341559934566d6bcJanis DanisevskisAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2953e448c1797913dbc12dbacc341559934566d6bcJanis DanisevskisIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
3053e448c1797913dbc12dbacc341559934566d6bcJanis DanisevskisARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
3153e448c1797913dbc12dbacc341559934566d6bcJanis DanisevskisLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
3253e448c1797913dbc12dbacc341559934566d6bcJanis DanisevskisCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
3353e448c1797913dbc12dbacc341559934566d6bcJanis DanisevskisSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
3453e448c1797913dbc12dbacc341559934566d6bcJanis DanisevskisINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
3553e448c1797913dbc12dbacc341559934566d6bcJanis DanisevskisCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
3653e448c1797913dbc12dbacc341559934566d6bcJanis DanisevskisARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
3753e448c1797913dbc12dbacc341559934566d6bcJanis DanisevskisPOSSIBILITY OF SUCH DAMAGE.
3853e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis-----------------------------------------------------------------------------
3953e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis*/
4053e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis
4153e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis
4253e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis#ifdef HAVE_CONFIG_H
4353e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis#include "config.h"
4453e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis#endif
4553e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis
4653e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis#include "pcre2_internal.h"
4753e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis
4853e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis#define STRING(a)  # a
4953e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis#define XSTRING(s) STRING(s)
5053e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis
5153e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis/* The texts of compile-time error messages. Compile-time error numbers start
5253e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskisat COMPILE_ERROR_BASE (100).
5353e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis
5453e448c1797913dbc12dbacc341559934566d6bcJanis DanisevskisThis used to be a table of strings, but in order to reduce the number of
5553e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskisrelocations needed when a shared library is loaded dynamically, it is now one
5653e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskislong string. We cannot use a table of offsets, because the lengths of inserts
5753e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskissuch as XSTRING(MAX_NAME_SIZE) are not known. Instead,
5853e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskispcre2_get_error_message() counts through to the one it wants - this isn't a
5953e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskisperformance issue because these strings are used only when there is an error.
6053e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis
6153e448c1797913dbc12dbacc341559934566d6bcJanis DanisevskisEach substring ends with \0 to insert a null character. This includes the final
6253e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskissubstring, so that the whole string ends with \0\0, which can be detected when
6353e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskiscounting through. */
6453e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis
658b979b2abae173bb836d8e85a842cfd00447d4beJanis Danisevskisstatic const unsigned char compile_error_texts[] =
6653e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "no error\0"
6753e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "\\ at end of pattern\0"
6853e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "\\c at end of pattern\0"
6953e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "unrecognized character follows \\\0"
7053e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "numbers out of order in {} quantifier\0"
7153e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  /* 5 */
7253e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "number too big in {} quantifier\0"
7353e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "missing terminating ] for character class\0"
7453e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "invalid escape sequence in character class\0"
7553e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "range out of order in character class\0"
7653e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "quantifier does not follow a repeatable item\0"
7753e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  /* 10 */
7853e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "internal error: unexpected repeat\0"
7953e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "unrecognized character after (? or (?-\0"
8053e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "POSIX named classes are supported only within a class\0"
8153e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "POSIX collating elements are not supported\0"
8253e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "missing closing parenthesis\0"
8353e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  /* 15 */
8453e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "reference to non-existent subpattern\0"
8553e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "pattern passed as NULL\0"
8653e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "unrecognised compile-time option bit(s)\0"
8753e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "missing ) after (?# comment\0"
8853e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "parentheses are too deeply nested\0"
8953e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  /* 20 */
9053e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "regular expression is too large\0"
9153e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "failed to allocate heap memory\0"
9253e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "unmatched closing parenthesis\0"
9353e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "internal error: code overflow\0"
9453e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "letter or underscore expected after (?< or (?'\0"
9553e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  /* 25 */
9653e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "lookbehind assertion is not fixed length\0"
9753e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "malformed number or name after (?(\0"
9853e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "conditional group contains more than two branches\0"
9953e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "assertion expected after (?( or (?(?C)\0"
10053e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "(?R or (?[+-]digits must be followed by )\0"
10153e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  /* 30 */
10253e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "unknown POSIX class name\0"
10353e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "internal error in pcre2_study(): should not occur\0"
10453e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "this version of PCRE2 does not have Unicode support\0"
10553e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "parentheses are too deeply nested (stack check)\0"
10653e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "character code point value in \\x{} or \\o{} is too large\0"
10753e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  /* 35 */
10853e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "invalid condition (?(0)\0"
1098b979b2abae173bb836d8e85a842cfd00447d4beJanis Danisevskis  "\\C is not allowed in a lookbehind assertion in UTF-" XSTRING(PCRE2_CODE_UNIT_WIDTH) " mode\0"
11053e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "PCRE does not support \\L, \\l, \\N{name}, \\U, or \\u\0"
11153e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "number after (?C is greater than 255\0"
11253e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "closing parenthesis for (?C expected\0"
11353e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  /* 40 */
11453e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "invalid escape sequence in (*VERB) name\0"
11553e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "unrecognized character after (?P\0"
11653e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "syntax error in subpattern name (missing terminator)\0"
11753e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "two named subpatterns have the same name (PCRE2_DUPNAMES not set)\0"
11853e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "group name must start with a non-digit\0"
11953e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  /* 45 */
12053e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "this version of PCRE2 does not have support for \\P, \\p, or \\X\0"
12153e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "malformed \\P or \\p sequence\0"
12253e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "unknown property name after \\P or \\p\0"
12353e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "subpattern name is too long (maximum " XSTRING(MAX_NAME_SIZE) " characters)\0"
12453e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "too many named subpatterns (maximum " XSTRING(MAX_NAME_COUNT) ")\0"
12553e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  /* 50 */
12653e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "invalid range in character class\0"
12753e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "octal value is greater than \\377 in 8-bit non-UTF-8 mode\0"
12853e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "internal error: overran compiling workspace\0"
12953e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "internal error: previously-checked referenced subpattern not found\0"
13053e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "DEFINE group contains more than one branch\0"
13153e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  /* 55 */
13253e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "missing opening brace after \\o\0"
13353e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "internal error: unknown newline setting\0"
13453e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "\\g is not followed by a braced, angle-bracketed, or quoted name/number or by a plain number\0"
13553e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "a numbered reference must not be zero\0"
13653e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "an argument is not allowed for (*ACCEPT), (*FAIL), or (*COMMIT)\0"
13753e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  /* 60 */
13853e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "(*VERB) not recognized or malformed\0"
13953e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "number is too big\0"
14053e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "subpattern name expected\0"
14153e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "digit expected after (?+\0"
14253e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "non-octal character in \\o{} (closing brace missing?)\0"
14353e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  /* 65 */
14453e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "different names for subpatterns of the same number are not allowed\0"
14553e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "(*MARK) must have an argument\0"
14653e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "non-hex character in \\x{} (closing brace missing?)\0"
14753e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis#ifndef EBCDIC
14853e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "\\c must be followed by a printable ASCII character\0"
14953e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis#else
15053e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "\\c must be followed by a letter or one of [\\]^_?\0"
15153e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis#endif
15253e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "\\k is not followed by a braced, angle-bracketed, or quoted name\0"
15353e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  /* 70 */
15453e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "internal error: unknown opcode in find_fixedlength()\0"
15553e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "\\N is not supported in a class\0"
15653e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "SPARE ERROR\0"
15753e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "disallowed Unicode code point (>= 0xd800 && <= 0xdfff)\0"
15853e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "using UTF is disabled by the application\0"
15953e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  /* 75 */
16053e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "using UCP is disabled by the application\0"
16153e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "name is too long in (*MARK), (*PRUNE), (*SKIP), or (*THEN)\0"
16253e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "character code point value in \\u.... sequence is too large\0"
16353e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "digits missing in \\x{} or \\o{}\0"
16453e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "syntax error in (?(VERSION condition\0"
16553e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  /* 80 */
16653e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "internal error: unknown opcode in auto_possessify()\0"
16753e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "missing terminating delimiter for callout with string argument\0"
16853e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "unrecognized string delimiter follows (?C\0"
16953e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "using \\C is disabled by the application\0"
17053e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "(?| and/or (?J: or (?x: parentheses are too deeply nested\0"
17153e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  /* 85 */
17253e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "using \\C is disabled in this PCRE2 library\0"
17353e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "regular expression is too complicated\0"
17453e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "lookbehind assertion is too long\0"
17553e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "pattern string is longer than the limit set by the application\0"
17653e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  ;
17753e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis
17853e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis/* Match-time and UTF error texts are in the same format. */
17953e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis
1808b979b2abae173bb836d8e85a842cfd00447d4beJanis Danisevskisstatic const unsigned char match_error_texts[] =
18153e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "no error\0"
18253e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "no match\0"
18353e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "partial match\0"
18453e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "UTF-8 error: 1 byte missing at end\0"
18553e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "UTF-8 error: 2 bytes missing at end\0"
18653e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  /* 5 */
18753e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "UTF-8 error: 3 bytes missing at end\0"
18853e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "UTF-8 error: 4 bytes missing at end\0"
18953e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "UTF-8 error: 5 bytes missing at end\0"
19053e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "UTF-8 error: byte 2 top bits not 0x80\0"
19153e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "UTF-8 error: byte 3 top bits not 0x80\0"
19253e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  /* 10 */
19353e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "UTF-8 error: byte 4 top bits not 0x80\0"
19453e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "UTF-8 error: byte 5 top bits not 0x80\0"
19553e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "UTF-8 error: byte 6 top bits not 0x80\0"
19653e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "UTF-8 error: 5-byte character is not allowed (RFC 3629)\0"
19753e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "UTF-8 error: 6-byte character is not allowed (RFC 3629)\0"
19853e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  /* 15 */
19953e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "UTF-8 error: code points greater than 0x10ffff are not defined\0"
20053e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "UTF-8 error: code points 0xd800-0xdfff are not defined\0"
20153e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "UTF-8 error: overlong 2-byte sequence\0"
20253e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "UTF-8 error: overlong 3-byte sequence\0"
20353e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "UTF-8 error: overlong 4-byte sequence\0"
20453e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  /* 20 */
20553e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "UTF-8 error: overlong 5-byte sequence\0"
20653e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "UTF-8 error: overlong 6-byte sequence\0"
20753e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "UTF-8 error: isolated byte with 0x80 bit set\0"
20853e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "UTF-8 error: illegal byte (0xfe or 0xff)\0"
20953e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "UTF-16 error: missing low surrogate at end\0"
21053e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  /* 25 */
21153e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "UTF-16 error: invalid low surrogate\0"
21253e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "UTF-16 error: isolated low surrogate\0"
21353e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "UTF-32 error: code points 0xd800-0xdfff are not defined\0"
21453e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "UTF-32 error: code points greater than 0x10ffff are not defined\0"
21553e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "bad data value\0"
21653e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  /* 30 */
21753e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "patterns do not all use the same character tables\0"
21853e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "magic number missing\0"
21953e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "pattern compiled in wrong mode: 8/16/32-bit error\0"
22053e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "bad offset value\0"
22153e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "bad option value\0"
22253e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  /* 35 */
22353e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "invalid replacement string\0"
22453e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "bad offset into UTF string\0"
22553e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "callout error code\0"              /* Never returned by PCRE2 itself */
22653e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "invalid data in workspace for DFA restart\0"
22753e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "too much recursion for DFA matching\0"
22853e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  /* 40 */
22953e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "backreference condition or recursion test is not supported for DFA matching\0"
23053e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "function is not supported for DFA matching\0"
23153e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "pattern contains an item that is not supported for DFA matching\0"
23253e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "workspace size exceeded in DFA matching\0"
23353e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "internal error - pattern overwritten?\0"
23453e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  /* 45 */
23553e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "bad JIT option\0"
23653e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "JIT stack limit reached\0"
23753e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "match limit exceeded\0"
23853e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "no more memory\0"
23953e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "unknown substring\0"
24053e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  /* 50 */
24153e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "non-unique substring name\0"
24253e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "NULL argument passed\0"
24353e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "nested recursion at the same subject position\0"
24453e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "recursion limit exceeded\0"
24553e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "requested value is not available\0"
24653e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  /* 55 */
24753e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "requested value is not set\0"
24853e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "offset limit set without PCRE2_USE_OFFSET_LIMIT\0"
24953e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "bad escape sequence in replacement string\0"
25053e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "expected closing curly bracket in replacement string\0"
25153e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "bad substitution in replacement string\0"
25253e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  /* 60 */
25353e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "match with end before start is not supported\0"
25453e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  "too many replacements (more than INT_MAX)\0"
2558b979b2abae173bb836d8e85a842cfd00447d4beJanis Danisevskis  "bad serialized data\0"
25653e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  ;
25753e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis
25853e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis
25953e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis/*************************************************
26053e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis*            Return error message                *
26153e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis*************************************************/
26253e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis
26353e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis/* This function copies an error message into a buffer whose units are of an
26453e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskisappropriate width. Error numbers are positive for compile-time errors, and
26553e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskisnegative for match-time errors (except for UTF errors), but the numbers are all
26653e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskisdistinct.
26753e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis
26853e448c1797913dbc12dbacc341559934566d6bcJanis DanisevskisArguments:
26953e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  enumber       error number
27053e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  buffer        where to put the message (zero terminated)
27153e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  size          size of the buffer
27253e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis
27353e448c1797913dbc12dbacc341559934566d6bcJanis DanisevskisReturns:        length of message if all is well
27453e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis                negative on error
27553e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis*/
27653e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis
27753e448c1797913dbc12dbacc341559934566d6bcJanis DanisevskisPCRE2_EXP_DEFN int PCRE2_CALL_CONVENTION
27853e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskispcre2_get_error_message(int enumber, PCRE2_UCHAR *buffer, size_t size)
27953e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis{
2808b979b2abae173bb836d8e85a842cfd00447d4beJanis Danisevskisconst unsigned char *message;
28153e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskissize_t i;
2828b979b2abae173bb836d8e85a842cfd00447d4beJanis Danisevskisint n;
28353e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis
28453e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskisif (size == 0) return PCRE2_ERROR_NOMEMORY;
28553e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis
2868b979b2abae173bb836d8e85a842cfd00447d4beJanis Danisevskisif (enumber >= COMPILE_ERROR_BASE)  /* Compile error */
28753e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  {
28853e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  message = compile_error_texts;
28953e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  n = enumber - COMPILE_ERROR_BASE;
29053e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  }
2918b979b2abae173bb836d8e85a842cfd00447d4beJanis Danisevskiselse if (enumber < 0)               /* Match or UTF error */
29253e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  {
29353e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  message = match_error_texts;
29453e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  n = -enumber;
29553e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  }
2968b979b2abae173bb836d8e85a842cfd00447d4beJanis Danisevskiselse                                /* Invalid error number */
2978b979b2abae173bb836d8e85a842cfd00447d4beJanis Danisevskis  {
2988b979b2abae173bb836d8e85a842cfd00447d4beJanis Danisevskis  message = (unsigned char *)"\0";  /* Empty message list */
2998b979b2abae173bb836d8e85a842cfd00447d4beJanis Danisevskis  n = 1;
3008b979b2abae173bb836d8e85a842cfd00447d4beJanis Danisevskis  }
30153e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis
30253e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskisfor (; n > 0; n--)
30353e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  {
30453e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  while (*message++ != CHAR_NULL) {};
3058b979b2abae173bb836d8e85a842cfd00447d4beJanis Danisevskis  if (*message == CHAR_NULL) return PCRE2_ERROR_BADDATA;
30653e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  }
30753e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis
30853e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskisfor (i = 0; *message != 0; i++)
30953e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  {
31053e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  if (i >= size - 1)
31153e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis    {
31253e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis    buffer[i] = 0;     /* Terminate partial message */
31353e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis    return PCRE2_ERROR_NOMEMORY;
31453e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis    }
31553e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  buffer[i] = *message++;
31653e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis  }
31753e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis
31853e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskisbuffer[i] = 0;
3198b979b2abae173bb836d8e85a842cfd00447d4beJanis Danisevskisreturn (int)i;
32053e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis}
32153e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis
32253e448c1797913dbc12dbacc341559934566d6bcJanis Danisevskis/* End of pcre2_error.c */
323