| 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;
|
| }
|
| }
|
|
|