Index: lucene/queries/src/test/org/apache/lucene/queries/function/TestFunctionQuerySort.java
===================================================================
--- lucene/queries/src/test/org/apache/lucene/queries/function/TestFunctionQuerySort.java	(revision 1468947)
+++ lucene/queries/src/test/org/apache/lucene/queries/function/TestFunctionQuerySort.java	(working copy)
@@ -69,7 +69,7 @@
 
     // Get hits sorted by our FunctionValues (ascending values)
     Query q = new MatchAllDocsQuery();
-    TopDocs hits = searcher.search(q, Integer.MAX_VALUE, orderBy);
+    TopDocs hits = searcher.search(q, reader.maxDoc(), orderBy);
     assertEquals(NUM_VALS, hits.scoreDocs.length);
     // Verify that sorting works in general
     int i = 0;
@@ -81,7 +81,7 @@
     // Now get hits after hit #2 using IS.searchAfter()
     int afterIdx = 1;
     FieldDoc afterHit = (FieldDoc) hits.scoreDocs[afterIdx];
-    hits = searcher.searchAfter(afterHit, q, Integer.MAX_VALUE, orderBy);
+    hits = searcher.searchAfter(afterHit, q, reader.maxDoc(), orderBy);
 
     // Expected # of hits: NUM_VALS - 2
     assertEquals(NUM_VALS - (afterIdx + 1), hits.scoreDocs.length);
Index: lucene/core/src/java/org/apache/lucene/search/IndexSearcher.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/search/IndexSearcher.java	(revision 1468947)
+++ lucene/core/src/java/org/apache/lucene/search/IndexSearcher.java	(working copy)
@@ -511,6 +511,12 @@
 
     if (sort == null) throw new NullPointerException("Sort must not be null");
     
+    int limit = reader.maxDoc();
+    if (limit == 0) {
+      limit = 1;
+    }
+    nDocs = Math.min(nDocs, limit);
+
     if (executor == null) {
       // use all leaves here!
       return search(leafContexts, weight, after, nDocs, sort, fillFields, doDocScores, doMaxScore);
