Author: vgritsenko
Date: Wed Mar 7 07:37:42 2007
New Revision: 515613
URL: http://svn.apache.org/viewvc?view=rev&rev=515613
Log:
Fix bug #37275: RE incorrectly processes nested {n,m} closures
Modified:
jakarta/regexp/trunk/build.xml
jakarta/regexp/trunk/docs/RETest.txt
jakarta/regexp/trunk/docs/applet.html
jakarta/regexp/trunk/docs/changes.html
jakarta/regexp/trunk/docs/index.html
jakarta/regexp/trunk/docs/jakarta-regexp.jar
jakarta/regexp/trunk/src/java/org/apache/regexp/RECompiler.java
jakarta/regexp/trunk/xdocs/RETest.txt
jakarta/regexp/trunk/xdocs/changes.xml
Modified: jakarta/regexp/trunk/build.xml
URL:
http://svn.apache.org/viewvc/jakarta/regexp/trunk/build.xml?view=diff&rev=515613&r1=515612&r2=515613
==============================================================================
--- jakarta/regexp/trunk/build.xml (original)
+++ jakarta/regexp/trunk/build.xml Wed Mar 7 07:37:42 2007
@@ -215,6 +215,7 @@
style="${jakarta-site.dir}/xdocs/stylesheets/site.xsl"
includes="**/*.xml"
excludes="**/stylesheets/** empty.xml">
+ <param name="sitenav-path"
expression="${basedir}/xdocs/stylesheets/site.xml"/>
</xslt>
<copy todir="${docs.dest}" filtering="no">
@@ -222,6 +223,7 @@
<include name="RETest.txt"/>
</fileset>
</copy>
+
<copy tofile="${docs.dest}/jakarta-regexp.jar"
file="${build.dir}/${final.name}.jar"/>
</target>
Modified: jakarta/regexp/trunk/docs/RETest.txt
URL:
http://svn.apache.org/viewvc/jakarta/regexp/trunk/docs/RETest.txt?view=diff&rev=515613&r1=515612&r2=515613
==============================================================================
--- jakarta/regexp/trunk/docs/RETest.txt (original)
+++ jakarta/regexp/trunk/docs/RETest.txt Wed Mar 7 07:37:42 2007
@@ -1516,3 +1516,22 @@
[^\D\S]
@0 1 _1AByz
NO
+
+#225
+(a{1}){0,2}
+aa
+YES
+3
+aa
+a
+a
+
+#226
+(a{1,3}b){1,3}
+abaabaaab
+YES
+4
+abaabaaab
+ab
+aab
+aaab
Modified: jakarta/regexp/trunk/docs/applet.html
URL:
http://svn.apache.org/viewvc/jakarta/regexp/trunk/docs/applet.html?view=diff&rev=515613&r1=515612&r2=515613
==============================================================================
--- jakarta/regexp/trunk/docs/applet.html (original)
+++ jakarta/regexp/trunk/docs/applet.html Wed Mar 7 07:37:42 2007
@@ -1,11 +1,12 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
<title>Jakarta Regexp - Jakarta Regexp Applet</title>
-<link rel="stylesheet" href="/style/style.css" type="text/css" />
-<meta name="author" value="Vadim Gritsenko" />
-<meta name="email" value="[EMAIL PROTECTED]" />
+<link rel="stylesheet" href="/style/style.css" type="text/css"/>
+<link rel="alternate" href="http://jakarta.apache.org/site/rss.xml"
type="application/rss+xml" title="Apache Jakarta News"/>
+<meta name="author" value="Vadim Gritsenko"/>
+<meta name="email" value="[EMAIL PROTECTED]"/>
</head>
<body>
<table class="page-header" border="0" width="100%" cellspacing="0">
@@ -14,10 +15,14 @@
<td colspan="2">
<!--JAKARTA LOGO-->
<a href="http://jakarta.apache.org/">
-<img src="http://jakarta.apache.org/images/jakarta-logo.gif" alt="The Jakarta
Project" border="0" />
+<img src="http://jakarta.apache.org/images/jakarta-logo.gif" alt="The Jakarta
Project" border="0"/>
+</a>
+</td>
+<td align="right">
+<a href="http://apachecon.com/2007/EU/">
+<img alt="ApacheCon Europe 2007" border="0"
src="http://www.apache.org/ads/ApacheCon/2007-europe-234x60.png"/>
</a>
</td>
-<td />
</tr>
</table>
<table border="0" width="100%" cellspacing="4">
@@ -91,18 +96,18 @@
</div>
</td>
<!--RIGHT SIDE NAVIGATION-->
-<td class="right-navbar" valign="top" nowrap="nowrap" />
+<td class="right-navbar" valign="top" nowrap="nowrap"/>
</tr>
<!--FOOTER SEPARATOR-->
<tr>
<td colspan="3">
-<hr noshade="noshade" size="1" />
+<hr noshade="noshade" size="1"/>
</td>
</tr>
<tr>
<td colspan="3">
<div class="page-footer">
-<em> Copyright © 1999-2005, The Apache
+<em> Copyright © 1999-2007, The Apache
Software Foundation. <a
href="http://jakarta.apache.org/site/legal.html">Legal information</a>. </em>
</div>
</td>
Modified: jakarta/regexp/trunk/docs/changes.html
URL:
http://svn.apache.org/viewvc/jakarta/regexp/trunk/docs/changes.html?view=diff&rev=515613&r1=515612&r2=515613
==============================================================================
--- jakarta/regexp/trunk/docs/changes.html (original)
+++ jakarta/regexp/trunk/docs/changes.html Wed Mar 7 07:37:42 2007
@@ -1,13 +1,14 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
<title>Jakarta Regexp - Jakarta Regexp History of Changes</title>
-<link rel="stylesheet" href="/style/style.css" type="text/css" />
-<meta name="author" value="Jon S. Stevens" />
-<meta name="email" value="[EMAIL PROTECTED]" />
-<meta name="author" value="Vadim Gritsenko" />
-<meta name="email" value="[EMAIL PROTECTED]" />
+<link rel="stylesheet" href="/style/style.css" type="text/css"/>
+<link rel="alternate" href="http://jakarta.apache.org/site/rss.xml"
type="application/rss+xml" title="Apache Jakarta News"/>
+<meta name="author" value="Jon S. Stevens"/>
+<meta name="email" value="[EMAIL PROTECTED]"/>
+<meta name="author" value="Vadim Gritsenko"/>
+<meta name="email" value="[EMAIL PROTECTED]"/>
</head>
<body>
<table class="page-header" border="0" width="100%" cellspacing="0">
@@ -16,10 +17,14 @@
<td colspan="2">
<!--JAKARTA LOGO-->
<a href="http://jakarta.apache.org/">
-<img src="http://jakarta.apache.org/images/jakarta-logo.gif" alt="The Jakarta
Project" border="0" />
+<img src="http://jakarta.apache.org/images/jakarta-logo.gif" alt="The Jakarta
Project" border="0"/>
+</a>
+</td>
+<td align="right">
+<a href="http://apachecon.com/2007/EU/">
+<img alt="ApacheCon Europe 2007" border="0"
src="http://www.apache.org/ads/ApacheCon/2007-europe-234x60.png"/>
</a>
</td>
-<td />
</tr>
</table>
<table border="0" width="100%" cellspacing="4">
@@ -86,6 +91,9 @@
<h3>Version 1.5-dev</h3>
<ul>
+<li>Fixed Bug
+ <a
href="http://issues.apache.org/bugzilla/show_bug.cgi?id=37275">37275</a>:
+ RE incorrectly processes nested {n,m} closures (ex: (A{1}){0,2}) (VG)</li>
<li>Added accessor for REProgram.prefix (VG)</li>
</ul>
@@ -239,18 +247,18 @@
</div>
</td>
<!--RIGHT SIDE NAVIGATION-->
-<td class="right-navbar" valign="top" nowrap="nowrap" />
+<td class="right-navbar" valign="top" nowrap="nowrap"/>
</tr>
<!--FOOTER SEPARATOR-->
<tr>
<td colspan="3">
-<hr noshade="noshade" size="1" />
+<hr noshade="noshade" size="1"/>
</td>
</tr>
<tr>
<td colspan="3">
<div class="page-footer">
-<em> Copyright © 1999-2005, The Apache
+<em> Copyright © 1999-2007, The Apache
Software Foundation. <a
href="http://jakarta.apache.org/site/legal.html">Legal information</a>. </em>
</div>
</td>
Modified: jakarta/regexp/trunk/docs/index.html
URL:
http://svn.apache.org/viewvc/jakarta/regexp/trunk/docs/index.html?view=diff&rev=515613&r1=515612&r2=515613
==============================================================================
--- jakarta/regexp/trunk/docs/index.html (original)
+++ jakarta/regexp/trunk/docs/index.html Wed Mar 7 07:37:42 2007
@@ -1,11 +1,12 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
<title>Jakarta Regexp - Jakarta Regexp</title>
-<link rel="stylesheet" href="/style/style.css" type="text/css" />
-<meta name="author" value="Jon S. Stevens" />
-<meta name="email" value="[EMAIL PROTECTED]" />
+<link rel="stylesheet" href="/style/style.css" type="text/css"/>
+<link rel="alternate" href="http://jakarta.apache.org/site/rss.xml"
type="application/rss+xml" title="Apache Jakarta News"/>
+<meta name="author" value="Jon S. Stevens"/>
+<meta name="email" value="[EMAIL PROTECTED]"/>
</head>
<body>
<table class="page-header" border="0" width="100%" cellspacing="0">
@@ -14,10 +15,14 @@
<td colspan="2">
<!--JAKARTA LOGO-->
<a href="http://jakarta.apache.org/">
-<img src="http://jakarta.apache.org/images/jakarta-logo.gif" alt="The Jakarta
Project" border="0" />
+<img src="http://jakarta.apache.org/images/jakarta-logo.gif" alt="The Jakarta
Project" border="0"/>
+</a>
+</td>
+<td align="right">
+<a href="http://apachecon.com/2007/EU/">
+<img alt="ApacheCon Europe 2007" border="0"
src="http://www.apache.org/ads/ApacheCon/2007-europe-234x60.png"/>
</a>
</td>
-<td />
</tr>
</table>
<table border="0" width="100%" cellspacing="4">
@@ -135,18 +140,18 @@
</div>
</td>
<!--RIGHT SIDE NAVIGATION-->
-<td class="right-navbar" valign="top" nowrap="nowrap" />
+<td class="right-navbar" valign="top" nowrap="nowrap"/>
</tr>
<!--FOOTER SEPARATOR-->
<tr>
<td colspan="3">
-<hr noshade="noshade" size="1" />
+<hr noshade="noshade" size="1"/>
</td>
</tr>
<tr>
<td colspan="3">
<div class="page-footer">
-<em> Copyright © 1999-2005, The Apache
+<em> Copyright © 1999-2007, The Apache
Software Foundation. <a
href="http://jakarta.apache.org/site/legal.html">Legal information</a>. </em>
</div>
</td>
Modified: jakarta/regexp/trunk/docs/jakarta-regexp.jar
URL:
http://svn.apache.org/viewvc/jakarta/regexp/trunk/docs/jakarta-regexp.jar?view=diff&rev=515613&r1=515612&r2=515613
==============================================================================
Binary files - no diff available.
Modified: jakarta/regexp/trunk/src/java/org/apache/regexp/RECompiler.java
URL:
http://svn.apache.org/viewvc/jakarta/regexp/trunk/src/java/org/apache/regexp/RECompiler.java?view=diff&rev=515613&r1=515612&r2=515613
==============================================================================
--- jakarta/regexp/trunk/src/java/org/apache/regexp/RECompiler.java (original)
+++ jakarta/regexp/trunk/src/java/org/apache/regexp/RECompiler.java Wed Mar 7
07:37:42 2007
@@ -16,7 +16,6 @@
package org.apache.regexp;
-import org.apache.regexp.RE;
import java.util.Hashtable;
/**
@@ -66,7 +65,7 @@
int[] bracketOpt = null; // Additional optional
matches
// Lookup table for POSIX character class names
- static Hashtable hashPOSIX = new Hashtable();
+ static final Hashtable hashPOSIX = new Hashtable();
static
{
hashPOSIX.put("alnum", new Character(RE.POSIX_CLASS_ALNUM));
@@ -280,7 +279,7 @@
* Match bracket {m,n} expression put results in bracket member variables
* @exception RESyntaxException Thrown if the regular expression has
invalid syntax.
*/
- void bracket() throws RESyntaxException
+ void bracket(int bracket) throws RESyntaxException
{
// Current character must be a '{'
if (idx >= len || pattern.charAt(idx++) != '{')
@@ -302,7 +301,7 @@
}
try
{
- bracketMin[brackets] = Integer.parseInt(number.toString());
+ bracketMin[bracket] = Integer.parseInt(number.toString());
}
catch (NumberFormatException e)
{
@@ -319,7 +318,7 @@
if (pattern.charAt(idx) == '}')
{
idx++;
- bracketOpt[brackets] = 0;
+ bracketOpt[bracket] = 0;
return;
}
@@ -339,7 +338,7 @@
if (pattern.charAt(idx) == '}')
{
idx++;
- bracketOpt[brackets] = bracketUnbounded;
+ bracketOpt[bracket] = bracketUnbounded;
return;
}
@@ -357,7 +356,7 @@
}
try
{
- bracketOpt[brackets] = Integer.parseInt(number.toString()) -
bracketMin[brackets];
+ bracketOpt[bracket] = Integer.parseInt(number.toString()) -
bracketMin[bracket];
}
catch (NumberFormatException e)
{
@@ -365,7 +364,7 @@
}
// Optional repetitions must be >= 0
- if (bracketOpt[brackets] < 0)
+ if (bracketOpt[bracket] < 0)
{
syntaxError("Bad range");
}
@@ -564,7 +563,7 @@
// Parse class declaration
char CHAR_INVALID = Character.MAX_VALUE;
char last = CHAR_INVALID;
- char simpleChar = 0;
+ char simpleChar;
boolean include = true;
boolean definingRange = false;
int idxFirst = idx;
@@ -965,6 +964,7 @@
{
return ret;
}
+
boolean greedy = true;
char closureType = pattern.charAt(idx);
switch (closureType)
@@ -1017,6 +1017,10 @@
{
if (bracketStart[i] == idx)
{
+ // Re-initialize bracketMin, bracketOpt since they
are all used up by now
+ if (bracketMin[i] == -1) {
+ bracket(i);
+ }
found = true;
break;
}
@@ -1030,31 +1034,22 @@
reallocBrackets();
}
bracketStart[brackets] = idx;
- bracket();
+ bracket(brackets);
bracketEnd[brackets] = idx;
i = brackets++;
}
// Process min first
- if (bracketMin[i]-- > 0)
+ if (bracketMin[i] > 0)
{
- if (bracketMin[i] > 0 || bracketOpt[i] != 0) {
+ if (--bracketMin[i] > 0 || bracketOpt[i] != 0) {
// Rewind stream and run it through again - more
matchers coming
- for (int j = 0; j < brackets; j++) {
- if (j != i && bracketStart[j] < idx
- && bracketStart[j] >= idxBeforeTerminal)
- {
- brackets--;
- bracketStart[j] = bracketStart[brackets];
- bracketEnd[j] = bracketEnd[brackets];
- bracketMin[j] = bracketMin[brackets];
- bracketOpt[j] = bracketOpt[brackets];
- }
+ for (int j = 0; j < i; j++) {
+ bracketMin[j] = -1;
}
-
idx = idxBeforeTerminal;
} else {
- // Bug #1030: No optinal matches - no need to
rewind
+ // Bug #1030: No optional matches - no need to
rewind
idx = bracketEnd[i];
}
break;
@@ -1072,9 +1067,11 @@
else
if (bracketOpt[i]-- > 0)
{
- if (bracketOpt[i] > 0)
- {
+ if (bracketOpt[i] > 0) {
// More optional matchers - 'play it again
sam!'
+ for (int j = 0; j < i; j++) {
+ bracketMin[j] = -1;
+ }
idx = idxBeforeTerminal;
} else {
// Bug #1030: We are done - this one is last
and optional
@@ -1464,7 +1461,6 @@
if (minRange[i] >= min && maxRange[i] <= max)
{
delete(i);
- i--;
return;
}
Modified: jakarta/regexp/trunk/xdocs/RETest.txt
URL:
http://svn.apache.org/viewvc/jakarta/regexp/trunk/xdocs/RETest.txt?view=diff&rev=515613&r1=515612&r2=515613
==============================================================================
--- jakarta/regexp/trunk/xdocs/RETest.txt (original)
+++ jakarta/regexp/trunk/xdocs/RETest.txt Wed Mar 7 07:37:42 2007
@@ -1516,3 +1516,22 @@
[^\D\S]
@0 1 _1AByz
NO
+
+#225
+^(a{1}){0,2}$
+aa
+YES
+3
+aa
+a
+a
+
+#226
+(a{1,3}b){1,3}
+abaabaaab
+YES
+4
+abaabaaab
+ab
+aab
+aaab
Modified: jakarta/regexp/trunk/xdocs/changes.xml
URL:
http://svn.apache.org/viewvc/jakarta/regexp/trunk/xdocs/changes.xml?view=diff&rev=515613&r1=515612&r2=515613
==============================================================================
--- jakarta/regexp/trunk/xdocs/changes.xml (original)
+++ jakarta/regexp/trunk/xdocs/changes.xml Wed Mar 7 07:37:42 2007
@@ -34,6 +34,9 @@
<h3>Version 1.5-dev</h3>
<ul>
+<li>Fixed Bug
+ <a
href="http://issues.apache.org/bugzilla/show_bug.cgi?id=37275">37275</a>:
+ RE incorrectly processes nested {n,m} closures (ex: (A{1}){0,2}) (VG)</li>
<li>Added accessor for REProgram.prefix (VG)</li>
</ul>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]