summaryrefslogtreecommitdiff
path: root/gnu/xml/dom
diff options
context:
space:
mode:
authorLillian Angel <langel@redhat.com>2006-04-12 16:10:25 +0000
committerLillian Angel <langel@redhat.com>2006-04-12 16:10:25 +0000
commit792570871a9def2b779add72e5fb6b8256ffc225 (patch)
tree73687aec34a7f34a40aec550be65d81c39cc4d48 /gnu/xml/dom
parent2bd218052e98b154d4383d2d6d881d70e46eb3f1 (diff)
downloadclasspath-792570871a9def2b779add72e5fb6b8256ffc225.tar.gz
2006-04-12 Lillian Angel <langel@redhat.com>
* gnu/xml/dom/DomDocument.java (checkNCName): Removed unneeded part of check. * gnu/xml/dom/DomNode.java (dispatchEvent): Added code to grow ancestors array if needed. Changed checks to use depth of node instead. Fixes an infinite loop and segmentation fault. * gnu/xml/dom/html2/DomHTMLParser.java (handleEndTag): No need to use/make a copy of the node. Causes an infinite loop.
Diffstat (limited to 'gnu/xml/dom')
-rw-r--r--gnu/xml/dom/DomDocument.java3
-rw-r--r--gnu/xml/dom/DomNode.java22
-rw-r--r--gnu/xml/dom/html2/DomHTMLParser.java6
3 files changed, 17 insertions, 14 deletions
diff --git a/gnu/xml/dom/DomDocument.java b/gnu/xml/dom/DomDocument.java
index 900d03ac3..0d52a23ff 100644
--- a/gnu/xml/dom/DomDocument.java
+++ b/gnu/xml/dom/DomDocument.java
@@ -535,8 +535,7 @@ public class DomDocument
int index = name.indexOf(':');
if (index != -1)
{
- if (index == 0 || index == (len - 1) ||
- name.lastIndexOf(':') != index)
+ if (index == 0 || name.lastIndexOf(':') != index)
{
throw new DomDOMException(DOMException.NAMESPACE_ERR,
name, null, 0);
diff --git a/gnu/xml/dom/DomNode.java b/gnu/xml/dom/DomNode.java
index 93f7c6f64..c06a4c1f1 100644
--- a/gnu/xml/dom/DomNode.java
+++ b/gnu/xml/dom/DomNode.java
@@ -1120,7 +1120,6 @@ public abstract class DomNode
node.appendChild(newChild);
}
}
-
if (nodeType == ENTITY_REFERENCE_NODE)
{
node.makeReadonly();
@@ -1556,23 +1555,30 @@ public abstract class DomNode
ancestorLen = ancestors.length;
}
- // XXX autogrow ancestors ... based on statistics
-
// Climb to the top of this subtree and handle capture, letting
// each node (from the top down) capture until one stops it or
// until we get to this one.
-
- for (index = 0, current = parent;
- current != null && index < ancestorLen;
- index++, current = current.parent)
+ current = parent;
+ if (current.depth >= ANCESTORS_INIT)
{
+ DomNode[] newants = new DomNode[current.depth + 1];
+ System.arraycopy(ancestors, 0, newants, 0, ancestors.length);
+ ancestors = newants;
+ ancestorLen = ancestors.length;
+ }
+ for (index = 0; index < ancestorLen; index++)
+ {
+ if (current == null || current.depth == 0)
+ break;
+
if (current.nListeners != 0)
{
haveAncestorRegistrations = true;
}
ancestors [index] = current;
+ current = current.parent;
}
- if (current != null)
+ if (current.depth > 0)
{
throw new RuntimeException("dispatchEvent capture stack size");
}
diff --git a/gnu/xml/dom/html2/DomHTMLParser.java b/gnu/xml/dom/html2/DomHTMLParser.java
index ef13ca516..2164e052c 100644
--- a/gnu/xml/dom/html2/DomHTMLParser.java
+++ b/gnu/xml/dom/html2/DomHTMLParser.java
@@ -225,7 +225,6 @@ public class DomHTMLParser
open.addFirst(close);
close = close.getParentNode();
}
-
if (close == null)
cursor = document;
else
@@ -236,9 +235,8 @@ public class DomHTMLParser
while (iter.hasNext())
{
Node item = (Node) iter.next();
- Node copy = item.cloneNode(true);
- cursor.appendChild(copy);
- cursor = copy;
+ cursor.appendChild(item);
+ cursor = item;
}
}
}