From: <sha...@us...> - 2011-11-29 03:21:33
|
Revision: 15557 http://exist.svn.sourceforge.net/exist/?rev=15557&view=rev Author: shabanovd Date: 2011-11-29 03:21:27 +0000 (Tue, 29 Nov 2011) Log Message: ----------- [bugfix] avoid StackOverflowError in recursively used defined functions during reset state phase Modified Paths: -------------- trunk/eXist/src/org/exist/xquery/UserDefinedFunction.java Modified: trunk/eXist/src/org/exist/xquery/UserDefinedFunction.java =================================================================== --- trunk/eXist/src/org/exist/xquery/UserDefinedFunction.java 2011-11-28 13:30:09 UTC (rev 15556) +++ trunk/eXist/src/org/exist/xquery/UserDefinedFunction.java 2011-11-29 03:21:27 UTC (rev 15557) @@ -48,6 +48,8 @@ private FunctionCall call; + private boolean reseted = false; + public UserDefinedFunction(XQueryContext context, FunctionSignature signature) { super(context, signature); } @@ -80,6 +82,8 @@ * @see org.exist.xquery.Function#analyze(org.exist.xquery.AnalyzeContextInfo) */ public void analyze(AnalyzeContextInfo contextInfo) throws XPathException { + reseted = false; + if(!call.isRecursive()) { // Save the local variable stack LocalVariable mark = context.markLocalVariables(true); @@ -187,6 +191,9 @@ * @see org.exist.xquery.PathExpr#resetState() */ public void resetState(boolean postOptimization) { + if (reseted) return; + reseted = true; + super.resetState(postOptimization); // Question: understand this test. Why not reset even is not in recursion ? // Answer: would lead to an infinite loop if the function is recursive. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |