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 2012/04/09 18:47:57 UTC

svn commit: r1311318 - /lucene/dev/branches/lucene3969/modules/analysis/common/src/java/org/apache/lucene/analysis/pattern/PatternTokenizer.java

Author: mikemccand
Date: Mon Apr  9 16:47:56 2012
New Revision: 1311318

URL: http://svn.apache.org/viewvc?rev=1311318&view=rev
Log:
LUCENE-3969: fix PatternTokenizer to not consume chars from the input Reader if it throws IAE

Modified:
    lucene/dev/branches/lucene3969/modules/analysis/common/src/java/org/apache/lucene/analysis/pattern/PatternTokenizer.java

Modified: lucene/dev/branches/lucene3969/modules/analysis/common/src/java/org/apache/lucene/analysis/pattern/PatternTokenizer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3969/modules/analysis/common/src/java/org/apache/lucene/analysis/pattern/PatternTokenizer.java?rev=1311318&r1=1311317&r2=1311318&view=diff
==============================================================================
--- lucene/dev/branches/lucene3969/modules/analysis/common/src/java/org/apache/lucene/analysis/pattern/PatternTokenizer.java (original)
+++ lucene/dev/branches/lucene3969/modules/analysis/common/src/java/org/apache/lucene/analysis/pattern/PatternTokenizer.java Mon Apr  9 16:47:56 2012
@@ -69,12 +69,17 @@ public final class PatternTokenizer exte
     super(input);
     this.pattern = pattern;
     this.group = group;
-    fillBuffer(str, input);
-    matcher = pattern.matcher(str);
+
+    // Use "" instead of str so don't consume chars
+    // (fillBuffer) from the input on throwing IAE below:
+    matcher = pattern.matcher("");
+
     // confusingly group count depends ENTIRELY on the pattern but is only accessible via matcher
     if (group >= 0 && group > matcher.groupCount()) {
       throw new IllegalArgumentException("invalid group specified: pattern only has: " + matcher.groupCount() + " capturing groups");
     }
+    fillBuffer(str, input);
+    matcher.reset(str);
     index = 0;
   }