Index: lucene/src/java/org/apache/lucene/search/FilteredTermsEnum.java =================================================================== --- lucene/src/java/org/apache/lucene/search/FilteredTermsEnum.java (revision 1001397) +++ lucene/src/java/org/apache/lucene/search/FilteredTermsEnum.java (working copy) @@ -198,6 +198,8 @@ if (doSeek) { doSeek = false; final BytesRef t = nextSeekTerm(actualTerm); + // Make sure we always seek forward: + assert actualTerm == null || t == null || t.compareTo(actualTerm) > 0: "curTerm=" + actualTerm + " seekTerm=" + t; if (t == null || tenum.seek(t, useTermsCache) == SeekStatus.END) { // no more terms to seek to or enum exhausted return null; Index: lucene/src/java/org/apache/lucene/search/NumericRangeQuery.java =================================================================== --- lucene/src/java/org/apache/lucene/search/NumericRangeQuery.java (revision 1001397) +++ lucene/src/java/org/apache/lucene/search/NumericRangeQuery.java (working copy) @@ -415,6 +415,7 @@ NumericUtils.splitLongRange(new NumericUtils.LongRangeBuilder() { @Override public final void addRange(BytesRef minPrefixCoded, BytesRef maxPrefixCoded) { + assert rangeBounds.size() == 0 || rangeBounds.getLast().compareTo(minPrefixCoded) < 0; rangeBounds.add(minPrefixCoded); rangeBounds.add(maxPrefixCoded); }