From 586efdfe598ba822657212ec3cd8092bd5d09896 Mon Sep 17 00:00:00 2001 From: Kallen Tu Date: Wed, 14 Sep 2022 20:35:04 +0000 Subject: [PATCH] Add ignores for dynamic calls in html_dart2js sanitizing code. Avoid removing dynamic invocations in sanitizing code as we don't know what type the element and its attributes may be. Change-Id: I057d908027befe7fd284bf4ec6c68bd1d0e977f4 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/259108 Reviewed-by: Srujan Gaddam Reviewed-by: Leaf Petersen Commit-Queue: Kallen Tu --- sdk/lib/html/dart2js/html_dart2js.dart | 10 +++++++++- tools/dom/src/Validators.dart | 10 +++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/sdk/lib/html/dart2js/html_dart2js.dart b/sdk/lib/html/dart2js/html_dart2js.dart index 7d125659ba3..cb75d05f3f7 100644 --- a/sdk/lib/html/dart2js/html_dart2js.dart +++ b/sdk/lib/html/dart2js/html_dart2js.dart @@ -41126,7 +41126,11 @@ class _ValidatingTreeSanitizer implements NodeTreeSanitizer { var isAttr; try { // If getting/indexing attributes throws, count that as corrupt. + // Don't remove dynamic calls in sanitizing code. + // ignore: avoid_dynamic_calls attrs = element.attributes; + // Don't remove dynamic calls in sanitizing code. + // ignore: avoid_dynamic_calls isAttr = attrs['is']; var corruptedTest1 = Element._hasCorruptedAttributes(element); @@ -41187,7 +41191,11 @@ class _ValidatingTreeSanitizer implements NodeTreeSanitizer { for (var i = attrs.length - 1; i >= 0; --i) { var name = keys[i]; if (!validator.allowsAttribute( - element, name.toLowerCase(), attrs[name])) { + element, + // Don't remove dynamic calls in sanitizing code. + // ignore: avoid_dynamic_calls + name.toLowerCase(), + attrs[name])) { window.console.warn('Removing disallowed attribute ' '<$tag $name="${attrs[name]}">'); attrs.remove(name); diff --git a/tools/dom/src/Validators.dart b/tools/dom/src/Validators.dart index 1fbafbd9bc5..efbf73b18cc 100644 --- a/tools/dom/src/Validators.dart +++ b/tools/dom/src/Validators.dart @@ -229,7 +229,11 @@ class _ValidatingTreeSanitizer implements NodeTreeSanitizer { var isAttr; try { // If getting/indexing attributes throws, count that as corrupt. + // Don't remove dynamic calls in sanitizing code. + // ignore: avoid_dynamic_calls attrs = element.attributes; + // Don't remove dynamic calls in sanitizing code. + // ignore: avoid_dynamic_calls isAttr = attrs['is']; var corruptedTest1 = Element._hasCorruptedAttributes(element); @@ -290,7 +294,11 @@ class _ValidatingTreeSanitizer implements NodeTreeSanitizer { for (var i = attrs.length - 1; i >= 0; --i) { var name = keys[i]; if (!validator.allowsAttribute( - element, name.toLowerCase(), attrs[name])) { + element, + // Don't remove dynamic calls in sanitizing code. + // ignore: avoid_dynamic_calls + name.toLowerCase(), + attrs[name])) { window.console.warn('Removing disallowed attribute ' '<$tag $name="${attrs[name]}">'); attrs.remove(name);