fixed problem with 0x2d in Char Range (bug #420596) added regression test
* xmlregexp.c: fixed problem with 0x2d in Char Range (bug #420596)
* test/regexp/bug420596, result/regexp/bug420596: added regression
test for this
svn path=/trunk/; revision=3594
diff --git a/ChangeLog b/ChangeLog
index 10de365..3a23f35 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Wed Mar 21 21:20:48 HKT 2007 William Brack <wbrack@mmm.com.hk>
+
+ * xmlregexp.c: fixed problem with 0x2d in Char Range (bug #420596)
+ * test/regexp/bug420596, result/regexp/bug420596: added regression
+ test for this
+
Wed Mar 21 14:23:08 HKT 2007 William Brack <wbrack@mmm.com.hk>
* HTMLparser.c: fixed memory access error on parsing of meta data
diff --git a/result/regexp/bug420596 b/result/regexp/bug420596
new file mode 100644
index 0000000..d23b303
--- /dev/null
+++ b/result/regexp/bug420596
@@ -0,0 +1,10 @@
+Regexp: (\+|-)(0[0-9]|1[0-1])
++01: Ok
+-01: Ok
++10: Ok
+-10: Ok
+Regexp: [+-](0[0-9]|1[0-1])
++01: Ok
+-01: Ok
++10: Ok
+-10: Ok
diff --git a/test/regexp/bug420596 b/test/regexp/bug420596
new file mode 100644
index 0000000..b6f285d
--- /dev/null
+++ b/test/regexp/bug420596
@@ -0,0 +1,10 @@
+=>(\+|-)(0[0-9]|1[0-1])
++01
+-01
++10
+-10
+=>[+-](0[0-9]|1[0-1])
++01
+-01
++10
+-10
diff --git a/xmlregexp.c b/xmlregexp.c
index fbd0e9f..784798d 100644
--- a/xmlregexp.c
+++ b/xmlregexp.c
@@ -54,6 +54,11 @@
#define CUR_SCHAR(s, l) xmlStringCurrentChar(NULL, s, &l)
#define NEXTL(l) ctxt->cur += l;
#define XML_REG_STRING_SEPARATOR '|'
+/*
+ * Need PREV to check on a '-' within a Character Group. May only be used
+ * when it's guaranteed that cur is not at the beginning of ctxt->string!
+ */
+#define PREV (ctxt->cur[-1])
/**
* TODO:
@@ -4853,10 +4858,15 @@
ERROR("Expecting a char range");
return;
}
- NEXTL(len);
- if (start == '-') {
+ /*
+ * Since we are "inside" a range, we can assume ctxt->cur is past
+ * the start of ctxt->string, and PREV should be safe
+ */
+ if ((start == '-') && (NXT(1) != ']') && (PREV != '[') && (PREV != '^')) {
+ NEXTL(len);
return;
}
+ NEXTL(len);
cur = CUR;
if ((cur != '-') || (NXT(1) == ']')) {
xmlRegAtomAddRange(ctxt, ctxt->atom, ctxt->neg,