[glib/wip/pcre-update: 8/8] regex: Add new error codes
- From: Christian Persch <chpe src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib/wip/pcre-update: 8/8] regex: Add new error codes
- Date: Sun, 23 Nov 2014 18:48:27 +0000 (UTC)
commit 303709937cff3ad7374ca5214dc480892f1e13ac
Author: Christian Persch <chpe gnome org>
Date: Sun Nov 23 10:25:33 2014 +0100
regex: Add new error codes
glib/gregex.c | 29 +++++++++++++++++++++++++++--
glib/gregex.h | 22 ++++++++++++++++++++--
glib/tests/regex.c | 10 ++++++++++
3 files changed, 57 insertions(+), 4 deletions(-)
---
diff --git a/glib/gregex.c b/glib/gregex.c
index c2f9a32..2553f49 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 f7c6da1..acadc6e 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 87e52f1..99bfb3e 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);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]