https://issues.apache.org/bugzilla/show_bug.cgi?id=44956





--- Comment #2 from Giedrius Noreikis <[EMAIL PROTECTED]>  2008-05-13 16:23:53 
PST ---
According to my tests, removing this line fixes the problem.
If more radical changes are undesirable due to a higher risk, to prevent such
bugs in future I would propose at least making that nullList final and
unmodifiable:

    static final List nullList;
    static {
            List list = new ArrayList();
            list.add(null);
            nullList = Collections.unmodifiableList(list);
    }


BTW, currently I'm working on a project using xmlsec library, and I have to fix
such issues anyway (just made own build).. So, in case you need help, I could
contribute more, by fixing bugs I've found, for example.


(In reply to comment #1)
> I'd like Raul to comment on this one, since I think this is part of his 
> performance improvement changes. It seems that if we just removed line 123
> of KeyInfo.java, it would fix the problem:
>       _storageResolvers.add(null);
> If there is a simple, low-risk fix then I am open to adding this to 1.4.2.
> (In reply to comment #0)
> > We are having problems with an 
> > org.apache.xml.security.signature.XMLSignature
> > instance creation in a multi-threaded environment: sometimes an
> > ArrayIndexOutOfBoundsException is thrown:
> > 
> > java.lang.ArrayIndexOutOfBoundsException: 38
> > at java.util.ArrayList.add(Unknown Source)
> > at org.apache.xml.security.keys.KeyInfo.<init>(Unknown Source)
> > at org.apache.xml.security.signature.XMLSignature.<init>(Unknown Source)
> > ...
> > 
> > The XMLSignature constructor being used is:
> > public XMLSignature(Element element, String BaseURI)
> > 
> > Looking further at the sources I found out that:
> > 1. The KeyInfo constructor being invoked by the XMLSignature constructor 
> > must
> > be public KeyInfo(Element element, String BaseURI) (XMLSignature:297).
> > 2. The exact line producing the exception must be 
> > _storageResolvers.add(null)
> > (KeyInfo:123).
> > 3. Upon the creation, the _storageResolvers variable of *each* KeyInfo 
> > instance
> > holds a reference to the *single* static nullList variable (KeyInfo:1067).
> > Thus, adding null to that list effectively modifies the single shared 
> > ArrayList
> > instance, while concurrent access and structural modifications of an 
> > ArrayList
> > instance are not allowed.
> > 4. The entire _storageResolvers.add(null) statement seems to be useless and
> > probably could be simply removed.
> > 5. IMHO, such a strange invention :) as that nullList should be evaluated 
> > and
> > probably removed as well.
> > 


-- 
Configure bugmail: https://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.

Reply via email to