Makes setting negative values to maxLength throw an IndexSize exception

This commit is contained in:
Sam Gibson 2015-12-02 13:35:05 +11:00
parent 51ca659f8a
commit 9668500e97
7 changed files with 75 additions and 15 deletions

View file

@ -1109,7 +1109,10 @@ impl Element {
}
}
// TODO: set_int_attribute(...)
pub fn set_int_attribute(&self, local_name: &Atom, value: i32) {
assert!(&**local_name == local_name.to_ascii_lowercase());
self.set_attribute(local_name, AttrValue::Int(DOMString::from(value.to_string()), value));
}
pub fn get_uint_attribute(&self, local_name: &Atom, default: u32) -> u32 {
assert!(local_name.chars().all(|ch| !ch.is_ascii() || ch.to_ascii_lowercase() == ch));

View file

@ -8,8 +8,8 @@ use dom::attr::{Attr, AttrValue};
use dom::bindings::cell::DOMRefCell;
use dom::bindings::codegen::Bindings::AttrBinding::AttrMethods;
use dom::bindings::codegen::Bindings::EventBinding::EventMethods;
use dom::bindings::codegen::Bindings::HTMLInputElementBinding::HTMLInputElementMethods;
use dom::bindings::codegen::Bindings::HTMLInputElementBinding;
use dom::bindings::codegen::Bindings::HTMLInputElementBinding::HTMLInputElementMethods;
use dom::bindings::codegen::Bindings::KeyboardEventBinding::KeyboardEventMethods;
use dom::bindings::global::GlobalRef;
use dom::bindings::inheritance::Castable;
@ -104,7 +104,7 @@ impl InputActivationState {
}
static DEFAULT_INPUT_SIZE: u32 = 20;
static DEFAULT_MAX_LENGTH : i32 = -1;
static DEFAULT_MAX_LENGTH: i32 = -1;
impl HTMLInputElement {
fn new_inherited(localName: DOMString, prefix: Option<DOMString>, document: &Document) -> HTMLInputElement {
@ -344,15 +344,7 @@ impl HTMLInputElementMethods for HTMLInputElement {
make_int_getter!(MaxLength, "maxlength", DEFAULT_MAX_LENGTH);
// https://html.spec.whatwg.org/multipage/#dom-input-maxlength
fn SetMaxLength(&self, val: i32) {
self.maxlength.set(val);
if val >= 0 {
self.textinput.borrow_mut().max_length = Some(val as usize)
} else {
self.textinput.borrow_mut().max_length = None
}
}
make_limited_int_setter!(SetMaxLength, "maxlength", DEFAULT_MAX_LENGTH);
// https://html.spec.whatwg.org/multipage/#dom-input-indeterminate
fn Indeterminate(&self) -> bool {

View file

@ -26,6 +26,26 @@ macro_rules! make_bool_getter(
);
);
#[macro_export]
macro_rules! make_limited_int_setter(
($attr:ident, $htmlname:tt, $default:expr) => (
fn $attr(&self, value: i32) -> $crate::dom::bindings::error::ErrorResult {
use dom::bindings::inheritance::Castable;
use dom::element::Element;
let value = if value < 0 {
return Err($crate::dom::bindings::error::Error::IndexSize);
} else {
value
};
let element = self.upcast::<Element>();
element.set_int_attribute(&atom!($htmlname), value);
Ok(())
}
);
);
#[macro_export]
macro_rules! make_int_getter(
($attr:ident, $htmlname:tt, $default:expr) => (

View file

@ -25,6 +25,7 @@ interface HTMLInputElement : HTMLElement {
// attribute DOMString inputMode;
//readonly attribute HTMLElement? list;
// attribute DOMString max;
[SetterThrows]
attribute long maxLength;
// attribute DOMString min;
// attribute long minLength;