SLING-5701 : ChunkCleanUpTask runs into an endless loop with empty chunks. Apply patch from Stefan Egli

git-svn-id: https://svn.apache.org/repos/asf/sling/trunk@1743479 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/sling/servlets/post/impl/helper/SlingFileUploadHandler.java b/src/main/java/org/apache/sling/servlets/post/impl/helper/SlingFileUploadHandler.java
index 29eb674..746bed6 100644
--- a/src/main/java/org/apache/sling/servlets/post/impl/helper/SlingFileUploadHandler.java
+++ b/src/main/java/org/apache/sling/servlets/post/impl/helper/SlingFileUploadHandler.java
@@ -16,7 +16,6 @@
  */
 package org.apache.sling.servlets.post.impl.helper;
 
-import java.io.BufferedInputStream;
 import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.io.FileInputStream;
@@ -103,7 +102,7 @@
     public static final String JCR_MIMETYPE = "jcr:mimeType";
     public static final String JCR_ENCODING = "jcr:encoding";
     public static final String JCR_DATA = "jcr:data";
-    
+
     private final Logger log = LoggerFactory.getLogger(getClass());
 
     /**
@@ -379,8 +378,6 @@
             String startPattern = SlingPostConstants.CHUNK_NODE_NAME + "_"
                 + "0_*";
             NodeIterator nodeItr = parentNode.getNodes(startPattern);
-            InputStream ins = null;
-            int i = 0;
             Set<InputStream> inpStrmSet = new LinkedHashSet<InputStream>();
             while (nodeItr.hasNext()) {
                 if (nodeItr.getSize() > 1) {
@@ -450,7 +447,7 @@
     /**
      * Get the last {@link SlingPostConstants#NT_SLING_CHUNK_NODETYPE}
      * {@link Node}.
-     * 
+     *
      * @param node {@link Node} containing
      *            {@link SlingPostConstants#NT_SLING_CHUNK_NODETYPE}
      *            {@link Node}s
@@ -470,21 +467,22 @@
             chunkParent = jcrContentNode;
 
         }
-        String startPattern = SlingPostConstants.CHUNK_NODE_NAME + "_" + "0_*";
-        NodeIterator nodeItr = chunkParent.getNodes(startPattern);
+        if (chunkParent == null) {
+            return null;
+        }
+        NodeIterator nodeItr = chunkParent.getNodes(SlingPostConstants.CHUNK_NODE_NAME + "_*");
         Node chunkNode = null;
+        long lastChunkStartIndex = -1;
         while (nodeItr.hasNext()) {
-            if (nodeItr.getSize() > 1) {
-                throw new RepositoryException(
-                    "more than one node found for pattern: " + startPattern);
-            }
-            chunkNode = nodeItr.nextNode();
+            Node currentNode = nodeItr.nextNode();
 
-            String[] indexBounds = chunkNode.getName().substring(
+            String[] indexBounds = currentNode.getName().substring(
                 (SlingPostConstants.CHUNK_NODE_NAME + "_").length()).split("_");
-            startPattern = SlingPostConstants.CHUNK_NODE_NAME + "_"
-                + String.valueOf(Long.valueOf(indexBounds[1]) + 1) + "_*";
-            nodeItr = chunkParent.getNodes(startPattern);
+            long chunkStartIndex = Long.valueOf(indexBounds[0]);
+            if (chunkStartIndex > lastChunkStartIndex) {
+                chunkNode = currentNode;
+                lastChunkStartIndex = chunkStartIndex;
+            }
         }
         return chunkNode;
     }