You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@santuario.apache.org by "Colm O hEigeartaigh (JIRA)" <ji...@apache.org> on 2012/10/27 12:55:12 UTC

[jira] [Resolved] (SANTUARIO-334) UnsyncByteArrayOutputStream hangs on messages larger 512 MB

     [ https://issues.apache.org/jira/browse/SANTUARIO-334?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Colm O hEigeartaigh resolved SANTUARIO-334.
-------------------------------------------

    Resolution: Fixed
    
> UnsyncByteArrayOutputStream hangs on messages larger 512 MB
> -----------------------------------------------------------
>
>                 Key: SANTUARIO-334
>                 URL: https://issues.apache.org/jira/browse/SANTUARIO-334
>             Project: Santuario
>          Issue Type: Bug
>          Components: Java
>    Affects Versions: Java 1.5.2
>         Environment: Windows 7
>            Reporter: Torsten Keim
>            Assignee: Colm O hEigeartaigh
>             Fix For: Java 1.4.8, Java 1.5.3
>
>
> If we check the signature of a message larger than 512 MB, the method expandSize(int newPos) of class org.apache.xml.security.utils.UnsyncByteArrayOutputStream goes in an endless loop, i.e. it hangs.
> The following lines show the endless loop:
> while (newPos > newSize) {
>  	newSize = newSize << 2;
> }
> Initially the size is 8 KB and after several bit shifts by 2 (equal to multiplication with 4) the size is 512 MB. If 512 MB is multiplied with 4 it comes to an overflow: 512*1024*1024 << 2 = -2147483648, which is Integer.MIN_VALUE.
> One solution would be to change the used types from int to long.
> If we stay with datatype int, we could improve the implementation:
> while (newPos > newSize) {
>  	newSize = (newSize < (512*1024*1024)) ? (newSize << 2) :Integer.MAX_VALUE ;
> }
> This would work with message up to 2 GB. Messages greater than 2 GB would still fail.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira