You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mi...@apache.org on 2014/11/07 22:32:55 UTC
svn commit: r1637453 - in /lucene/dev/branches/lucene_solr_4_10: ./ lucene/
lucene/CHANGES.txt lucene/core/
lucene/core/src/java/org/apache/lucene/util/automaton/Operations.java
lucene/core/src/test/org/apache/lucene/util/automaton/TestRegExp.java
Author: mikemccand
Date: Fri Nov 7 21:32:54 2014
New Revision: 1637453
URL: http://svn.apache.org/r1637453
Log:
LUCENE-6054: allow repeating the empty automaton
Modified:
lucene/dev/branches/lucene_solr_4_10/ (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/ (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/CHANGES.txt (contents, props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/core/ (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/core/src/java/org/apache/lucene/util/automaton/Operations.java
lucene/dev/branches/lucene_solr_4_10/lucene/core/src/test/org/apache/lucene/util/automaton/TestRegExp.java
Modified: lucene/dev/branches/lucene_solr_4_10/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_10/lucene/CHANGES.txt?rev=1637453&r1=1637452&r2=1637453&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_10/lucene/CHANGES.txt (original)
+++ lucene/dev/branches/lucene_solr_4_10/lucene/CHANGES.txt Fri Nov 7 21:32:54 2014
@@ -12,6 +12,9 @@ Bug fixes
now throws an exception instead of exhausting CPU/RAM. (Nik
Everett via Mike McCandless)
+* LUCENE-6054: Allow repeating the empty automaton (Nik Everett via
+ Mike McCandless)
+
======================= Lucene 4.10.2 ======================
Bug fixes
Modified: lucene/dev/branches/lucene_solr_4_10/lucene/core/src/java/org/apache/lucene/util/automaton/Operations.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_10/lucene/core/src/java/org/apache/lucene/util/automaton/Operations.java?rev=1637453&r1=1637452&r2=1637453&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_10/lucene/core/src/java/org/apache/lucene/util/automaton/Operations.java (original)
+++ lucene/dev/branches/lucene_solr_4_10/lucene/core/src/java/org/apache/lucene/util/automaton/Operations.java Fri Nov 7 21:32:54 2014
@@ -29,6 +29,13 @@
package org.apache.lucene.util.automaton;
+import org.apache.lucene.util.ArrayUtil;
+import org.apache.lucene.util.BytesRef;
+import org.apache.lucene.util.BytesRefBuilder;
+import org.apache.lucene.util.IntsRef;
+import org.apache.lucene.util.IntsRefBuilder;
+import org.apache.lucene.util.RamUsageEstimator;
+
import java.util.ArrayList;
import java.util.Arrays;
import java.util.BitSet;
@@ -40,13 +47,6 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
-import org.apache.lucene.util.ArrayUtil;
-import org.apache.lucene.util.BytesRef;
-import org.apache.lucene.util.BytesRefBuilder;
-import org.apache.lucene.util.IntsRef;
-import org.apache.lucene.util.IntsRefBuilder;
-import org.apache.lucene.util.RamUsageEstimator;
-
/**
* Automata operations.
*
@@ -174,6 +174,10 @@ final public class Operations {
* Complexity: linear in number of states.
*/
static public Automaton repeat(Automaton a) {
+ if (a.getNumStates() == 0) {
+ // Repeating the empty automata will still only accept the empty automata.
+ return a;
+ }
Automaton.Builder builder = new Automaton.Builder();
builder.createState();
builder.setAccept(0, true);
Modified: lucene/dev/branches/lucene_solr_4_10/lucene/core/src/test/org/apache/lucene/util/automaton/TestRegExp.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_10/lucene/core/src/test/org/apache/lucene/util/automaton/TestRegExp.java?rev=1637453&r1=1637452&r2=1637453&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_10/lucene/core/src/test/org/apache/lucene/util/automaton/TestRegExp.java (original)
+++ lucene/dev/branches/lucene_solr_4_10/lucene/core/src/test/org/apache/lucene/util/automaton/TestRegExp.java Fri Nov 7 21:32:54 2014
@@ -55,4 +55,16 @@ public class TestRegExp extends LuceneTe
// paranoia:
assertTrue(a.toString().length() > 0);
}
+
+ public void testRepeatWithEmptyLanguage() throws Exception {
+ Automaton a = new RegExp("#*").toAutomaton(1000);
+ // paranoia:
+ assertTrue(a.toString().length() > 0);
+ a = new RegExp("#+").toAutomaton(1000);
+ assertTrue(a.toString().length() > 0);
+ a = new RegExp("#{2,10}").toAutomaton(1000);
+ assertTrue(a.toString().length() > 0);
+ a = new RegExp("#?").toAutomaton(1000);
+ assertTrue(a.toString().length() > 0);
+ }
}