changeset 56116:6725db0f57d5

(skip_chars): Only recognize [:class:] when it has the proper format and class is a lower-case word.
author Kim F. Storm <storm@cua.dk>
date Tue, 15 Jun 2004 09:42:31 +0000
parents f54273435989
children 75f76430cc6c
files src/syntax.c
diffstat 1 files changed, 7 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/src/syntax.c	Tue Jun 15 09:42:18 2004 +0000
+++ b/src/syntax.c	Tue Jun 15 09:42:31 2004 +0000
@@ -1455,7 +1455,7 @@
 	    {
 	      const unsigned char *class_beg = str + i_byte + 1;
 	      const unsigned char *class_end = class_beg;
-	      const unsigned char *class_limit = str + size_byte;
+	      const unsigned char *class_limit = str + size_byte - 2;
 	      /* Leave room for the null.	 */
 	      unsigned char class_name[CHAR_CLASS_MAX_LENGTH + 1];
 	      re_wctype_t cc;
@@ -1463,17 +1463,13 @@
 	      if (class_limit - class_beg > CHAR_CLASS_MAX_LENGTH)
 		class_limit = class_beg + CHAR_CLASS_MAX_LENGTH;
 
-	      while (class_end != class_limit
-		     && ! (*class_end >= 0200
-			   || *class_end <= 040
-			   || (*class_end == ':'
-			       && class_end[1] == ']')))
+	      while (class_end < class_limit
+		     && *class_end >= 'a' && *class_end <= 'z')
 		class_end++;
 
-	      if (class_end == class_limit
-		  || *class_end >= 0200
-		  || *class_end <= 040)
-		error ("Invalid ISO C character class");
+	      if (class_end == class_beg
+		  || *class_end != ':' || class_end[1] != ']')
+		goto not_a_class_name;
 
 	      bcopy (class_beg, class_name, class_end - class_beg);
 	      class_name[class_end - class_beg] = 0;
@@ -1488,6 +1484,7 @@
 	      continue;
 	    }
 
+	not_a_class_name:
 	  if (c == '\\')
 	    {
 	      if (i_byte == size_byte)