Hello,
I occasionally got ArrayIndexOutOfBoundsExceptions in the
DOMTreeManager, and I think the reason were two loops in the
appendGroup(...) and recycleTopLevelGroup(...) methods where the size of groupManagers was erroneously assumed to be constant during the loop. Attached is a patch against CVS rev. 1.19 of DOMTreeManager.java.
Best wishes Christian Gawron
Index: sources/org/apache/batik/svggen/DOMTreeManager.java
===================================================================
RCS file:
/home/cvspublic/xml-batik/sources/org/apache/batik/svggen/DOMTreeManager.java,v
retrieving revision 1.19
diff -C5 -r1.19 DOMTreeManager.java
*** sources/org/apache/batik/svggen/DOMTreeManager.java 18 Aug 2004 07:14:59
-0000 1.19
--- sources/org/apache/batik/svggen/DOMTreeManager.java 12 Feb 2005 23:28:08
-0000
***************
*** 172,183 ****
* @param group new group to be appended to the topLevelGroup
* @param groupManager DOMTreeManager that produced the group.
*/
public void appendGroup(Element group, DOMGroupManager groupManager){
topLevelGroup.appendChild(group);
! int nManagers = groupManagers.size();
! for(int i=0; i<nManagers; i++){
DOMGroupManager gm = (DOMGroupManager)groupManagers.elementAt(i);
if( gm != groupManager )
gm.recycleCurrentGroup();
}
}
--- 172,182 ----
* @param group new group to be appended to the topLevelGroup
* @param groupManager DOMTreeManager that produced the group.
*/
public void appendGroup(Element group, DOMGroupManager groupManager){
topLevelGroup.appendChild(group);
! for(int i=0; i<groupManagers.size(); i++){
DOMGroupManager gm = (DOMGroupManager)groupManagers.elementAt(i);
if( gm != groupManager )
gm.recycleCurrentGroup();
}
}
***************
*** 193,204 ****
/**
* Reset the state of this object to handler a new topLevelGroup
*/
private void recycleTopLevelGroup(boolean recycleConverters){
// First, recycle group managers
! int nManagers = groupManagers.size();
! for(int i=0; i<nManagers; i++){
DOMGroupManager gm = (DOMGroupManager)groupManagers.elementAt(i);
gm.recycleCurrentGroup();
}
// Create top level group node
--- 192,202 ----
/**
* Reset the state of this object to handler a new topLevelGroup
*/
private void recycleTopLevelGroup(boolean recycleConverters){
// First, recycle group managers
! for(int i=0; i<groupManagers.size(); i++){
DOMGroupManager gm = (DOMGroupManager)groupManagers.elementAt(i);
gm.recycleCurrentGroup();
}
// Create top level group node--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
