Index: tools/dom/src/Validators.dart |
diff --git a/tools/dom/src/Validators.dart b/tools/dom/src/Validators.dart |
index 4dbe32c5942269275d38bf590e5d6a5cf60e1c0f..ee42c513edff0eba9a166f2a09a7c9131a6d7997 100644 |
--- a/tools/dom/src/Validators.dart |
+++ b/tools/dom/src/Validators.dart |
@@ -167,10 +167,21 @@ class _ValidatingTreeSanitizer implements NodeTreeSanitizer { |
sanitizeNode(node, parent); |
var child = node.lastChild; |
- while (child != null) { |
- // Child may be removed during the walk. |
- var nextChild = child.previousNode; |
- walk(child, node); |
+ while (null != child) { |
+ var nextChild; |
+ try { |
+ // Child may be removed during the walk, and we may not |
+ // even be able to get its previousNode. |
+ nextChild = child.previousNode; |
+ } catch (e) { |
+ // Child appears bad, remove it. We want to check the rest of the |
+ // children of node and, but we have no way of getting to the next |
+ // child, so start again from the last child. |
+ _removeNode(child, node); |
+ child = null; |
+ nextChild = node.lastChild; |
+ } |
+ if (child != null) walk(child, node); |
child = nextChild; |
} |
} |