LibWeb: Cast to the correct type in Element::auto_directionality()

Previously, we always cast to a HTMLInputElement when getting the value
of an auto directionality form associated element. This caused
undefined behavior when determining the directionality of an element
that wasn't a HTMLInputElement.
This commit is contained in:
Tim Ledbetter 2024-05-28 06:42:08 +01:00 committed by Andreas Kling
commit d6297ec074
Notes: sideshowbarker 2024-07-16 23:52:22 +09:00
5 changed files with 86 additions and 59 deletions

View file

@ -0,0 +1,53 @@
<!DOCTYPE html>
<style>
.test {
font-size: 12px;
}
</style>
<script src="../include.js"></script>
<script>
test(() => {
function testSelectorMatch(input, selector) {
println(`Input matches ${selector}: ${input.matches(selector)}`);
}
function testElementDirectionality(element) {
element.value = "Well hello friends!"
testSelectorMatch(element, ":dir(ltr)");
testSelectorMatch(element, ":dir(rtl)");
element.dir = "invalid";
testSelectorMatch(element, ":dir(ltr)");
testSelectorMatch(element, ":dir(rtl)");
element.dir = "rtl";
testSelectorMatch(element, ":dir(ltr)");
testSelectorMatch(element, ":dir(rtl)");
element.dir = "auto"
testSelectorMatch(element, ":dir(ltr)");
testSelectorMatch(element, ":dir(rtl)");
element.value = "حسنًا ، مرحباً أيها الأصدقاء";
testSelectorMatch(element, ":dir(ltr)");
testSelectorMatch(element, ":dir(rtl)");
element.dir = "ltr"
testSelectorMatch(element, ":dir(ltr)");
testSelectorMatch(element, ":dir(rtl)");
element.removeAttribute("dir");
testSelectorMatch(element, ":dir(ltr)");
testSelectorMatch(element, ":dir(rtl)");
}
println("Testing input element with type=text");
const textInput = document.createElement("input");
textInput.type = "text";
testElementDirectionality(textInput);
println("Testing textarea element");
const textAreaElement = document.createElement("textarea");
testElementDirectionality(textAreaElement);
});
</script>