[hibernate-issues] [Hibernate-JIRA] Commented: (HHH-2166) Long "in" lists in queries results in a Java stack overflow exception.

Benjamin Truitt (JIRA) noreply at atlassian.com
Fri Feb 5 18:39:31 EST 2010


    [ http://opensource.atlassian.com/projects/hibernate/browse/HHH-2166?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=35489#action_35489 ] 

Benjamin Truitt commented on HHH-2166:
--------------------------------------

I see that this issue is resolved in trunk and in the 3.3.1 branch, but if you download 3.3.1.GA, it is not resolved in the source bundled in that download.

This is also true for hibernate 3.3.2.GA.

However, the issue does appear to be resolved in 3.5.0-Beta-4.

Here are the download links I am referring to:
http://sourceforge.net/projects/hibernate/files/

I'm confused about why this fix isn't included in 3.3.1.  Is there any reason I shouldn't download the source for 3.3.1, replace the source code for this file with the latest version from trunk, and rebuild?  

Thanks.

> Long "in" lists in queries results in a Java stack overflow exception.
> ----------------------------------------------------------------------
>
>                 Key: HHH-2166
>                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-2166
>             Project: Hibernate Core
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 3.2.0.ga
>         Environment: Hibernate 3.2.0.cr3 through 3.2.0.ga (at least).  Any standard deployment of Sun's JVM on Windows, Linux, or Mac OS X (and presumably other platforms like Solaris)
>            Reporter: Philip R. "Pib" Burns
>            Assignee: Strong Liu
>             Fix For: 3.2.x, 3.3.x, 3.5.0-Beta-3
>
>         Attachments: NodeTraverser.java
>
>   Original Estimate: 1 day
>  Remaining Estimate: 1 day
>
> With Hibernate 320ga a long "in" list can result in a stack overflow error during the parsing stage. For example, a query element like
> where x in (:x)
> or a manually constructed
> where x in (1,2,3 .....)
> can generate a stack overflow if the number of elements referenced by x exceeds a number dependent upon the amount of available stack space. For many JVMs, the limit is between 9,000 and 10,000 assuming a relatively empty stack at the point of query execution. We have applications which occasionally use lists several times this size.
> The stack overflow occurs in org.hibernate.hql.ast.util.NodeTraverser which uses a recursive algorithm to walk a parse tree. Long "in" lists generate a subtree of depth about equal to the number of elements in the list. A sufficiently long list results in a stack overflow when NodeTraverser's internal method visitDepthFirst calls itself too many times.
> The solution is to replace the recursive tree walking strategy with an iterative one that does not use up stack space. I am attaching the source for a replacement version of . NodeTraverser which implements the iterative tree walking method.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the hibernate-issues mailing list