You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@velocity.apache.org by "Andrea Bernardo Ciddio (JIRA)" <de...@velocity.apache.org> on 2007/10/05 02:27:50 UTC

[jira] Created: (VELTOOLS-87) Infinite recursion of the RenderTool.recurse(Context, String) method

Infinite recursion of the RenderTool.recurse(Context, String) method
--------------------------------------------------------------------

                 Key: VELTOOLS-87
                 URL: https://issues.apache.org/jira/browse/VELTOOLS-87
             Project: Velocity Tools
          Issue Type: Bug
          Components: GenericTools
    Affects Versions: 1.3, 1.2, 1.4, 1.x, 2.0
            Reporter: Andrea Bernardo Ciddio
            Priority: Critical


The recurse method never returns when the vtl template contains a loop (should have been fixed in rev 321227):

RenderTool tool = new RenderTool();
VelocityContext ctx = new VelocityContext();
String vtl = "#set($foo = 'I am [$foo]') $foo";
System.out.println(tool.recurse(ctx, vtl));

[StackOverflow]


the issue is caused by a misplaced '++' operator in the internalRecurse method:


   protected String internalRecurse(Context ctx, String vtl, int count) throws Exception
    {
        String result = eval(ctx, vtl);
        if (result == null || result.equals(vtl))
        {
            return result;
        }
        else
        {
            // if we haven't reached our parse depth...
            if (count < parseDepth)
            {
                // continue recursing
                return internalRecurse(ctx, result, count++);   // <====  BUG: should be '++count'
            }
            else
            {
                // abort and return what we have so far
                //FIXME: notify the developer or user somehow??
                return result;
            }
        }
    }

The counter is updated after the recursive call returns, which never happens

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@velocity.apache.org
For additional commands, e-mail: dev-help@velocity.apache.org


[jira] Resolved: (VELTOOLS-87) Infinite recursion of the RenderTool.recurse(Context, String) method

Posted by "Nathan Bubna (JIRA)" <de...@velocity.apache.org>.
     [ https://issues.apache.org/jira/browse/VELTOOLS-87?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Nathan Bubna resolved VELTOOLS-87.
----------------------------------

       Resolution: Fixed
    Fix Version/s: 2.0
                   1.x
                   1.4

Thanks!  This is now fixed in both the 1.x and 2.x branches.

> Infinite recursion of the RenderTool.recurse(Context, String) method
> --------------------------------------------------------------------
>
>                 Key: VELTOOLS-87
>                 URL: https://issues.apache.org/jira/browse/VELTOOLS-87
>             Project: Velocity Tools
>          Issue Type: Bug
>          Components: GenericTools
>    Affects Versions: 1.2, 1.3, 1.4, 1.x, 2.0
>            Reporter: Andrea Bernardo Ciddio
>            Priority: Critical
>             Fix For: 1.4, 1.x, 2.0
>
>
> The recurse method never returns when the vtl template contains a loop (should have been fixed in rev 321227):
> RenderTool tool = new RenderTool();
> VelocityContext ctx = new VelocityContext();
> String vtl = "#set($foo = 'I am [$foo]') $foo";
> System.out.println(tool.recurse(ctx, vtl));
> [StackOverflow]
> the issue is caused by a misplaced '++' operator in the internalRecurse method:
>    protected String internalRecurse(Context ctx, String vtl, int count) throws Exception
>     {
>         String result = eval(ctx, vtl);
>         if (result == null || result.equals(vtl))
>         {
>             return result;
>         }
>         else
>         {
>             // if we haven't reached our parse depth...
>             if (count < parseDepth)
>             {
>                 // continue recursing
>                 return internalRecurse(ctx, result, count++);   // <====  BUG: should be '++count'
>             }
>             else
>             {
>                 // abort and return what we have so far
>                 //FIXME: notify the developer or user somehow??
>                 return result;
>             }
>         }
>     }
> The counter is updated after the recursive call returns, which never happens

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@velocity.apache.org
For additional commands, e-mail: dev-help@velocity.apache.org


[jira] Closed: (VELTOOLS-87) Infinite recursion of the RenderTool.recurse(Context, String) method

Posted by "Andrea Bernardo Ciddio (JIRA)" <de...@velocity.apache.org>.
     [ https://issues.apache.org/jira/browse/VELTOOLS-87?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Andrea Bernardo Ciddio closed VELTOOLS-87.
------------------------------------------


> Infinite recursion of the RenderTool.recurse(Context, String) method
> --------------------------------------------------------------------
>
>                 Key: VELTOOLS-87
>                 URL: https://issues.apache.org/jira/browse/VELTOOLS-87
>             Project: Velocity Tools
>          Issue Type: Bug
>          Components: GenericTools
>    Affects Versions: 1.2, 1.3, 1.4, 1.x, 2.x
>            Reporter: Andrea Bernardo Ciddio
>            Priority: Critical
>             Fix For: 1.4, 1.x, 2.x
>
>
> The recurse method never returns when the vtl template contains a loop (should have been fixed in rev 321227):
> RenderTool tool = new RenderTool();
> VelocityContext ctx = new VelocityContext();
> String vtl = "#set($foo = 'I am [$foo]') $foo";
> System.out.println(tool.recurse(ctx, vtl));
> [StackOverflow]
> the issue is caused by a misplaced '++' operator in the internalRecurse method:
>    protected String internalRecurse(Context ctx, String vtl, int count) throws Exception
>     {
>         String result = eval(ctx, vtl);
>         if (result == null || result.equals(vtl))
>         {
>             return result;
>         }
>         else
>         {
>             // if we haven't reached our parse depth...
>             if (count < parseDepth)
>             {
>                 // continue recursing
>                 return internalRecurse(ctx, result, count++);   // <====  BUG: should be '++count'
>             }
>             else
>             {
>                 // abort and return what we have so far
>                 //FIXME: notify the developer or user somehow??
>                 return result;
>             }
>         }
>     }
> The counter is updated after the recursive call returns, which never happens

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@velocity.apache.org
For additional commands, e-mail: dev-help@velocity.apache.org