diff options
| author | Lillian Angel <langel@redhat.com> | 2006-04-12 16:10:25 +0000 |
|---|---|---|
| committer | Lillian Angel <langel@redhat.com> | 2006-04-12 16:10:25 +0000 |
| commit | 792570871a9def2b779add72e5fb6b8256ffc225 (patch) | |
| tree | 73687aec34a7f34a40aec550be65d81c39cc4d48 /gnu/xml/dom | |
| parent | 2bd218052e98b154d4383d2d6d881d70e46eb3f1 (diff) | |
| download | classpath-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.java | 3 | ||||
| -rw-r--r-- | gnu/xml/dom/DomNode.java | 22 | ||||
| -rw-r--r-- | gnu/xml/dom/html2/DomHTMLParser.java | 6 |
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; } } } |
