From 3a7a84f39b8c749839a8885770bc6a03e130744d Mon Sep 17 00:00:00 2001 From: Tim Ledbetter Date: Mon, 18 Mar 2024 06:13:01 +0000 Subject: [PATCH] LibWeb: Limit progress element attribute values to the correct ranges The max attribute is now clamped to ensure it is limited to positive numbers and the value attribute is clamped to ensure it is non-negative. --- .../expected/HTML/HTMLProgressElement-set-attributes.txt | 3 +++ .../Text/input/HTML/HTMLProgressElement-set-attributes.html | 5 +++++ Userland/Libraries/LibWeb/HTML/HTMLProgressElement.cpp | 4 ++-- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/Tests/LibWeb/Text/expected/HTML/HTMLProgressElement-set-attributes.txt b/Tests/LibWeb/Text/expected/HTML/HTMLProgressElement-set-attributes.txt index a693297379e..6af4a53740e 100644 --- a/Tests/LibWeb/Text/expected/HTML/HTMLProgressElement-set-attributes.txt +++ b/Tests/LibWeb/Text/expected/HTML/HTMLProgressElement-set-attributes.txt @@ -6,3 +6,6 @@ value attribute after setting value attribute to 50: 1 value attribute after setting max attribute to 100: 50 max attribute after setting max attribute to 100: 100 value attribute after setting max attribute to 101: 100 +value attribute after setting value attribute to -1: 0 +value attribute after setting max attribute to 0: 0 +max attribute after setting max attribute to 0: 1 diff --git a/Tests/LibWeb/Text/input/HTML/HTMLProgressElement-set-attributes.html b/Tests/LibWeb/Text/input/HTML/HTMLProgressElement-set-attributes.html index 8a7be1d6dd7..98905b0d2f0 100644 --- a/Tests/LibWeb/Text/input/HTML/HTMLProgressElement-set-attributes.html +++ b/Tests/LibWeb/Text/input/HTML/HTMLProgressElement-set-attributes.html @@ -16,5 +16,10 @@ println(`max attribute after setting max attribute to 100: ${progressElement.max}`); progressElement.value = 101; println(`value attribute after setting max attribute to 101: ${progressElement.value}`); + progressElement.value = -1; + println(`value attribute after setting value attribute to -1: ${progressElement.value}`); + progressElement.max = 0; + println(`value attribute after setting max attribute to 0: ${progressElement.value}`); + println(`max attribute after setting max attribute to 0: ${progressElement.max}`); }); diff --git a/Userland/Libraries/LibWeb/HTML/HTMLProgressElement.cpp b/Userland/Libraries/LibWeb/HTML/HTMLProgressElement.cpp index a205c55d132..648e1674170 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLProgressElement.cpp +++ b/Userland/Libraries/LibWeb/HTML/HTMLProgressElement.cpp @@ -49,7 +49,7 @@ double HTMLProgressElement::value() const WebIDL::ExceptionOr HTMLProgressElement::set_value(double value) { if (value < 0) - return {}; + value = 0; TRY(set_attribute(HTML::AttributeNames::value, MUST(String::number(value)))); update_progress_value_element(); @@ -69,7 +69,7 @@ double HTMLProgressElement::max() const WebIDL::ExceptionOr HTMLProgressElement::set_max(double value) { if (value <= 0) - return {}; + value = 1; TRY(set_attribute(HTML::AttributeNames::max, MUST(String::number(value)))); update_progress_value_element();