diff options
author | Christian Persch <chpe@gnome.org> | 2014-11-23 10:25:33 +0100 |
---|---|---|
committer | Christian Persch <chpe@gnome.org> | 2014-11-23 10:59:32 +0100 |
commit | 303709937cff3ad7374ca5214dc480892f1e13ac (patch) | |
tree | 73b911cf3ba4f950fcd667b4d9ad4e9945c26295 | |
parent | 5f62610ce36ef7cf34258b8a556e0000f75b39ea (diff) | |
download | glib-wip/pcre-update.tar.gz |
regex: Add new error codeswip/pcre-update
-rw-r--r-- | glib/gregex.c | 29 | ||||
-rw-r--r-- | glib/gregex.h | 22 | ||||
-rw-r--r-- | glib/tests/regex.c | 10 |
3 files changed, 57 insertions, 4 deletions
diff --git a/glib/gregex.c b/glib/gregex.c index c2f9a328d..2553f49c4 100644 --- a/glib/gregex.c +++ b/glib/gregex.c @@ -413,8 +413,8 @@ translate_compile_error (gint *errcode, const gchar **errmsg) case G_REGEX_ERROR_POSIX_COLLATING_ELEMENTS_NOT_SUPPORTED: *errmsg = _("POSIX collating elements are not supported"); break; - case G_REGEX_ERROR_HEX_CODE_TOO_LARGE: - *errmsg = _("character value in \\x{...} sequence is too large"); + case G_REGEX_ERROR_CODE_TOO_LARGE: /* also G_REGEX_ERROR_HEX_CODE_TOO_LARGE */ + *errmsg = _("character value in \\x{...} or \\o{...} sequence is too large"); break; case G_REGEX_ERROR_INVALID_CONDITION: *errmsg = _("invalid condition (?(0)"); @@ -523,6 +523,31 @@ translate_compile_error (gint *errcode, const gchar **errmsg) case G_REGEX_ERROR_RAW_LOCK: *errmsg = _("switching to UTF-8 mode is disallowed"); break; + case G_REGEX_ERROR_NON_HEX_CHARACTER: + *errmsg = _("non-hexadecimal character in \\x{...} (closing brace missing?)"); + break; + case G_REGEX_ERROR_NON_OCTAL_CHARACTER: + *errmsg = _("non-octal character in \\o{...} (closing brace missing?)"); + break; + case G_REGEX_ERROR_MISSING_OPENING_BRACE: + *errmsg = _("missing opening brace after \\o"); + break; + case 119: + case 185: + *errcode = G_REGEX_ERROR_NESTED_PARENTHESES_LIMIT_EXCEEDED; + /* fall-through */ + case G_REGEX_ERROR_NESTED_PARENTHESES_LIMIT_EXCEEDED: + *errmsg = _("parentheses are too deeply nested"); + break; + case G_REGEX_ERROR_INVALID_RANGE_IN_CHARACTER_CLASS: + *errmsg = _("invalid range in character class"); + break; + case G_REGEX_ERROR_INVALID_GROUP_NAME_START: + *errmsg = _("group name must start with a non-digit"); + break; + case G_REGEX_ERROR_HEX_OR_OCTAL_DIGITS_MISSING: + *errmsg = _("digits missing in \\x{} or \\o{}"); + break; case 116: /* erroffset passed as NULL */ /* This should not happen as we never pass a NULL erroffset */ diff --git a/glib/gregex.h b/glib/gregex.h index f7c6da1cd..acadc6e60 100644 --- a/glib/gregex.h +++ b/glib/gregex.h @@ -138,6 +138,15 @@ G_BEGIN_DECLS * or "(*UTF8)". Since: 2.44 * @G_REGEX_ERROR_VERB_UNKNOWN_OR_MALFORMED: unknown or malformed backtracing * control verb. Same as %G_REGEX_ERROR_UNKNOWN_BACKTRACKING_CONTROL_VERB. Since: 2.44 + * @G_REGEX_ERROR_CODE_TOO_LARGE = G_REGEX_ERROR_HEX_CODE_TOO_LARGE, + * Value in "\\x{...}" or "\\o{...}" sequence is too large. Since 2.44 + * @G_REGEX_ERROR_NON_HEX_CHARACTER: Non-hexadecimal character in "\\x{...}" + * sequence. Since: 2.44 + * @G_REGEX_ERROR_NON_OCTAL_CHARACTER: Non-octal characterin "\\o{...}" sequence. Since: 2.44 + * @G_REGEX_ERROR_MISSING_OPENING_BRACE: Opening brace missing after "\\o" sequence. Since: 2.44 + * @G_REGEX_ERROR_NESTED_PARENTHESES_LIMIT_EXCEEDED: Parentheses are too deeply nested. Since: 2.44 + * @G_REGEX_ERROR_INVALID_RANGE_IN_CHARACTER_CLASS: Invalid range in character class. Since: 2.44 + * @G_REGEX_ERROR_INVALID_GROUP_NAME_START: Group name must start with non-digit character. Since: 2.44 * * Error codes returned by regular expressions functions. * @@ -205,7 +214,15 @@ typedef enum G_REGEX_ERROR_TOO_MANY_FORWARD_REFERENCES = 172, G_REGEX_ERROR_NAME_TOO_LONG = 175, G_REGEX_ERROR_CHARACTER_VALUE_TOO_LARGE = 176, - G_REGEX_ERROR_RAW_LOCK = 178 + G_REGEX_ERROR_RAW_LOCK = 178, + G_REGEX_ERROR_CODE_TOO_LARGE = G_REGEX_ERROR_HEX_CODE_TOO_LARGE, + G_REGEX_ERROR_NON_HEX_CHARACTER = 179, + G_REGEX_ERROR_NON_OCTAL_CHARACTER = 180, + G_REGEX_ERROR_MISSING_OPENING_BRACE = 181, + G_REGEX_ERROR_NESTED_PARENTHESES_LIMIT_EXCEEDED = 182, + G_REGEX_ERROR_INVALID_RANGE_IN_CHARACTER_CLASS = 183, + G_REGEX_ERROR_INVALID_GROUP_NAME_START = 184, + G_REGEX_ERROR_HEX_OR_OCTAL_DIGITS_MISSING = 186 } GRegexError; /** @@ -295,7 +312,8 @@ GQuark g_regex_error_quark (void); * JavaScript rather than PCRE. Since: 2.34 * @G_REGEX_RAW_LOCK: Disallow switching to UTF-8 mode via "(*UTF)" in the pattern * being compiled. %G_REGEX_RAW must also be set when using this flag. Since: 2.44 - * + * @G_REGEX_ERROR_HEX_OR_OCTAL_DIGITS_MISSING: Digits are missingin a "\\x{...}" or + * "\\o{...}" sequence. Since: 2.44 * Flags specifying compile-time options. * * Since: 2.14 diff --git a/glib/tests/regex.c b/glib/tests/regex.c index 87e52f1c3..99bfb3e2d 100644 --- a/glib/tests/regex.c +++ b/glib/tests/regex.c @@ -2296,6 +2296,15 @@ main (int argc, char *argv[]) TEST_NEW_FAIL ("\\u0100", G_REGEX_RAW | G_REGEX_JAVASCRIPT_COMPAT, G_REGEX_ERROR_CHARACTER_VALUE_TOO_LARGE); TEST_NEW_FAIL ("(*UTF)", G_REGEX_RAW | G_REGEX_RAW_LOCK, G_REGEX_ERROR_RAW_LOCK); TEST_NEW_FAIL ("(*LIMIT_MATCH=abc)", 0, G_REGEX_ERROR_VERB_UNKNOWN_OR_MALFORMED); + TEST_NEW_FAIL ("\\x{100000000}", 0, G_REGEX_ERROR_CODE_TOO_LARGE); + TEST_NEW_FAIL ("\\o{100000000000}", 0, G_REGEX_ERROR_CODE_TOO_LARGE); + TEST_NEW_FAIL ("\\x{g}", 0, G_REGEX_ERROR_NON_HEX_CHARACTER); + TEST_NEW_FAIL ("\\o{9}", 0, G_REGEX_ERROR_NON_OCTAL_CHARACTER); + TEST_NEW_FAIL ("(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))", 0, G_REGEX_ERROR_NESTED_PARENTHESES_LIMIT_EXCEEDED); + TEST_NEW_FAIL ("[A-\\d]", 0, G_REGEX_ERROR_INVALID_RANGE_IN_CHARACTER_CLASS); + TEST_NEW_FAIL ("(?<0a>x)", 0, G_REGEX_ERROR_INVALID_GROUP_NAME_START); + TEST_NEW_FAIL ("\\x{}",0, G_REGEX_ERROR_HEX_OR_OCTAL_DIGITS_MISSING); + TEST_NEW_FAIL ("\\o{}",0, G_REGEX_ERROR_HEX_OR_OCTAL_DIGITS_MISSING); /* These errors can't really be tested sanely: * G_REGEX_ERROR_EXPRESSION_TOO_LARGE @@ -2465,6 +2474,7 @@ main (int argc, char *argv[]) TEST_MATCH("[DŽ]", G_REGEX_CASELESS, 0, "DŽ", -1, 0, 0, TRUE); TEST_MATCH("[DŽ]", G_REGEX_CASELESS, 0, "Dž", -1, 0, 0, TRUE); TEST_MATCH("[DŽ]", G_REGEX_CASELESS, 0, "dž", -1, 0, 0, TRUE); + TEST_MATCH("[DŽ]", G_REGEX_CASELESS, 0, "Dž", -1, 0, 0, TRUE); /* TEST_MATCH_NEXT#(pattern, string, string_len, start_position, ...) */ TEST_MATCH_NEXT0("a", "x", -1, 0); |