mirror of
https://github.com/servo/servo.git
synced 2025-07-24 15:50:21 +01:00
Auto merge of #6694 - jdm:websocketprotocol, r=Ms2ger
Reject websocket protocol requests that don't match https://tools.iet… …f.org/html/rfc6455#section-4.1 . <!-- Reviewable:start --> [<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/6694) <!-- Reviewable:end -->
This commit is contained in:
commit
6b4f1a42f0
8 changed files with 31 additions and 509 deletions
|
@ -4,7 +4,7 @@
|
|||
|
||||
enum BinaryType { "blob", "arraybuffer" };
|
||||
|
||||
[Constructor(DOMString url)]
|
||||
[Constructor(DOMString url, optional /*(*/DOMString /*or DOMString[])*/ protocols)]
|
||||
interface WebSocket : EventTarget {
|
||||
readonly attribute DOMString url;
|
||||
//ready state
|
||||
|
|
|
@ -96,11 +96,34 @@ impl WebSocket {
|
|||
|
||||
}
|
||||
|
||||
pub fn new(global: GlobalRef, url: DOMString) -> Fallible<Root<WebSocket>> {
|
||||
pub fn new(global: GlobalRef,
|
||||
url: DOMString,
|
||||
protocols: Option<DOMString>)
|
||||
-> Fallible<Root<WebSocket>> {
|
||||
// Step 1.
|
||||
let parsed_url = try!(Url::parse(&url).map_err(|_| Error::Syntax));
|
||||
let url = try!(parse_url(&parsed_url).map_err(|_| Error::Syntax));
|
||||
|
||||
// Step 4.
|
||||
let protocols = protocols.as_slice();
|
||||
|
||||
// Step 5.
|
||||
for (i, protocol) in protocols.iter().enumerate() {
|
||||
// https://tools.ietf.org/html/rfc6455#section-4.1
|
||||
// Handshake requirements, step 10
|
||||
if protocol.is_empty() {
|
||||
return Err(Syntax);
|
||||
}
|
||||
|
||||
if protocols[i+1..].iter().any(|p| p == protocol) {
|
||||
return Err(Syntax);
|
||||
}
|
||||
|
||||
if protocol.chars().any(|c| c < '\u{0021}' || c > '\u{007E}') {
|
||||
return Err(Syntax);
|
||||
}
|
||||
}
|
||||
|
||||
/*TODO: This constructor is only a prototype, it does not accomplish the specs
|
||||
defined here:
|
||||
http://html.spec.whatwg.org
|
||||
|
@ -150,8 +173,11 @@ impl WebSocket {
|
|||
Ok(ws)
|
||||
}
|
||||
|
||||
pub fn Constructor(global: GlobalRef, url: DOMString) -> Fallible<Root<WebSocket>> {
|
||||
WebSocket::new(global, url)
|
||||
pub fn Constructor(global: GlobalRef,
|
||||
url: DOMString,
|
||||
protocols: Option<DOMString>)
|
||||
-> Fallible<Root<WebSocket>> {
|
||||
WebSocket::new(global, url, protocols)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
|
||||
#![feature(append)]
|
||||
#![feature(arc_unique)]
|
||||
#![feature(as_slice)]
|
||||
#![feature(as_unsafe_cell)]
|
||||
#![feature(borrow_state)]
|
||||
#![feature(box_raw)]
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
[Create-nonAscii-protocol-string.htm]
|
||||
type: testharness
|
||||
[W3C WebSocket API - Create WebSocket - Pass a valid URL and a protocol string with non-ascii values - SYNTAX_ERR is thrown]
|
||||
expected: FAIL
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
[Create-protocol-with-space.htm]
|
||||
type: testharness
|
||||
[W3C WebSocket API - Create WebSocket - Pass a valid URL and a protocol string with a space in it - SYNTAX_ERR is thrown]
|
||||
expected: FAIL
|
||||
|
|
@ -1,485 +0,0 @@
|
|||
[004.html]
|
||||
type: testharness
|
||||
[WebSockets: new WebSocket(url, invalid protocol)]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 1]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 2]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 3]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 4]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 5]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 6]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 7]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 8]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 9]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 10]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 11]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 12]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 13]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 14]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 15]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 16]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 17]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 18]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 19]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 20]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 21]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 22]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 23]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 24]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 25]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 26]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 27]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 28]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 29]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 30]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 31]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 32]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 33]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 34]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 35]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 36]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 37]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 38]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 39]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 40]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 41]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 42]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 43]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 44]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 45]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 46]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 47]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 48]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 49]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 50]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 51]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 52]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 53]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 54]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 55]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 56]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 57]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 58]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 59]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 60]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 61]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 62]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 63]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 64]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 65]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 66]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 67]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 68]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 69]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 70]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 71]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 72]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 73]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 74]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 75]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 76]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 77]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 78]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 79]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 80]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 81]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 82]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 83]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 84]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 85]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 86]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 87]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 88]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 89]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 90]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 91]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 92]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 93]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 94]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 95]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 96]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 97]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 98]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 99]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 100]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 101]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 102]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 103]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 104]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 105]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 106]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 107]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 108]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 109]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 110]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 111]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 112]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 113]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 114]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 115]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 116]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 117]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 118]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 119]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 120]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 121]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 122]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 123]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 124]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 125]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 126]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 127]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 128]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 129]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 130]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 131]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 132]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 133]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 134]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 135]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 136]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 137]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 138]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 139]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 140]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 141]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 142]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 143]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 144]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 145]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 146]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 147]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 148]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 149]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 150]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 151]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 152]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 153]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 154]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 155]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 156]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 157]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 158]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 159]
|
||||
expected: FAIL
|
||||
|
||||
[WebSockets: new WebSocket(url, invalid protocol) 160]
|
||||
expected: FAIL
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
[007.html]
|
||||
type: testharness
|
||||
[WebSockets: new WebSocket(url, null char)]
|
||||
expected: FAIL
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
[021.html]
|
||||
type: testharness
|
||||
[WebSockets: Same sub protocol twice]
|
||||
expected: FAIL
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue