Empty methods are not allowed

This commit is contained in:
Manish Goregaokar 2014-06-08 19:36:05 +05:30
parent 30827bab4d
commit 86594a752c
2 changed files with 7 additions and 1 deletions

View file

@ -47,6 +47,9 @@ impl ByteString {
pub fn is_token(&self) -> bool { pub fn is_token(&self) -> bool {
let ByteString(ref vec) = *self; let ByteString(ref vec) = *self;
if vec.len() == 0 {
return false; // A token must be at least a single character
}
vec.iter().all(|&x| { vec.iter().all(|&x| {
// http://tools.ietf.org/html/rfc2616#section-2.2 // http://tools.ietf.org/html/rfc2616#section-2.2
match x { match x {
@ -55,6 +58,7 @@ impl ByteString {
44 | 59 | 58 | 92 | 34 | 44 | 59 | 58 | 92 | 34 |
47 | 91 | 93 | 63 | 61 | 47 | 91 | 93 | 63 | 61 |
123 | 125 | 32 => false, // separators 123 | 125 | 32 => false, // separators
x if x > 127 => false, // non-CHARs
_ => true _ => true
} }
}) })

View file

@ -301,7 +301,7 @@ impl<'a> XMLHttpRequestMethods<'a> for JSRef<'a, XMLHttpRequest> {
}; };
// XXXManishearth Do some handling of username/passwords // XXXManishearth Do some handling of username/passwords
if self.sync { if self.sync {
// FIXME: This should only happen if the global environmet is a document environment // FIXME: This should only happen if the global environment is a document environment
if self.timeout != 0 || self.with_credentials || self.response_type != _empty { if self.timeout != 0 || self.with_credentials || self.response_type != _empty {
return Err(InvalidAccess) return Err(InvalidAccess)
} }
@ -320,6 +320,8 @@ impl<'a> XMLHttpRequestMethods<'a> for JSRef<'a, XMLHttpRequest> {
} }
Ok(()) Ok(())
}, },
// This includes cases where as_str() returns None, and when is_token() returns false,
// both of which indicate invalid extension method names
_ => Err(Syntax), // Step 3 _ => Err(Syntax), // Step 3
} }
} }