[glib/wip/pcre-update: 8/8] regex: Add new error codes



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]