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

Manuel Dominguez Sarmiento (JIRA) noreply at atlassian.com
Sat Feb 6 01:18:34 EST 2010


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

Manuel Dominguez Sarmiento commented on HHH-2166:
-------------------------------------------------

All I did was build the project with Maven from the 3.5.0 beta 4 distribution. It was the only test that failed.

> 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