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]