Browse Source

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.
Tim Ledbetter 1 year ago
parent
commit
3a7a84f39b

+ 3 - 0
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

+ 5 - 0
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}`);
     });
 </script>

+ 2 - 2
Userland/Libraries/LibWeb/HTML/HTMLProgressElement.cpp

@@ -49,7 +49,7 @@ double HTMLProgressElement::value() const
 WebIDL::ExceptionOr<void> 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<void> 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();