You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by jk...@apache.org on 2014/04/26 14:06:27 UTC

[04/10] git commit: TAP5-2317: fix a StackOverflowError when counting a large flow

TAP5-2317: fix a StackOverflowError when counting a large flow


Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/602f43f5
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/602f43f5
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/602f43f5

Branch: refs/heads/master
Commit: 602f43f5441a7f0309a712130587e3433c959448
Parents: d8ec30d
Author: Jochen Kemnade <jo...@web.de>
Authored: Sat Apr 26 13:19:09 2014 +0200
Committer: Jochen Kemnade <jo...@web.de>
Committed: Sat Apr 26 13:19:09 2014 +0200

----------------------------------------------------------------------
 .../main/java/org/apache/tapestry5/func/AbstractFlow.java   | 9 ++++++++-
 .../src/test/java/org/apache/tapestry5/func/FuncTest.java   | 8 ++++++++
 2 files changed, 16 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/602f43f5/tapestry-func/src/main/java/org/apache/tapestry5/func/AbstractFlow.java
----------------------------------------------------------------------
diff --git a/tapestry-func/src/main/java/org/apache/tapestry5/func/AbstractFlow.java b/tapestry-func/src/main/java/org/apache/tapestry5/func/AbstractFlow.java
index 9a5eb5b..e657c41 100644
--- a/tapestry-func/src/main/java/org/apache/tapestry5/func/AbstractFlow.java
+++ b/tapestry-func/src/main/java/org/apache/tapestry5/func/AbstractFlow.java
@@ -213,7 +213,14 @@ abstract class AbstractFlow<T> implements Flow<T>
 
     public int count()
     {
-        return isEmpty() ? 0 : 1 + rest().count();
+        if (isEmpty()){
+            return 0;
+        }
+        int count = 0;
+        for(Flow<T> flow = this; flow != null && !flow.isEmpty(); flow = flow.rest()){
+            count++;
+        }
+        return count;
     }
 
     public Flow<T> take(int length)

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/602f43f5/tapestry-func/src/test/java/org/apache/tapestry5/func/FuncTest.java
----------------------------------------------------------------------
diff --git a/tapestry-func/src/test/java/org/apache/tapestry5/func/FuncTest.java b/tapestry-func/src/test/java/org/apache/tapestry5/func/FuncTest.java
index 7bf527a..a9f2dc6 100644
--- a/tapestry-func/src/test/java/org/apache/tapestry5/func/FuncTest.java
+++ b/tapestry-func/src/test/java/org/apache/tapestry5/func/FuncTest.java
@@ -571,6 +571,14 @@ public class FuncTest extends BaseFuncTest
     }
 
     @Test
+    public void count_of_a_large_flow()
+    {
+        Flow<Integer> flow = F.series(1, 1).take(50000);
+
+        assertEquals(flow.count(), 50000);
+    }
+
+    @Test
     public void concat_empty_list()
     {
         Flow<Integer> flow = F.flow(1, 3);