mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
bug 661036 - websockets allowed prohibited space character in protocol header, with test update r=biesi r=bsmith
This commit is contained in:
parent
27a34348cd
commit
b012dc160e
@ -1065,7 +1065,7 @@ nsWebSocket::SetProtocol(const nsString& aProtocol)
|
||||
PRUint32 length = aProtocol.Length();
|
||||
PRUint32 i;
|
||||
for (i = 0; i < length; ++i) {
|
||||
if (aProtocol[i] < static_cast<PRUnichar>(0x0020) ||
|
||||
if (aProtocol[i] < static_cast<PRUnichar>(0x0021) ||
|
||||
aProtocol[i] > static_cast<PRUnichar>(0x007E)) {
|
||||
return NS_ERROR_DOM_SYNTAX_ERR;
|
||||
}
|
||||
|
@ -9,30 +9,30 @@ def web_socket_do_extra_handshake(request):
|
||||
# must set request.ws_protocol to the selected version from ws_requested_protocols
|
||||
request.ws_protocol = request.ws_requested_protocols[0]
|
||||
|
||||
if request.ws_protocol == "test 2.1":
|
||||
if request.ws_protocol == "test-2.1":
|
||||
time.sleep(5)
|
||||
pass
|
||||
elif request.ws_protocol == "test 9":
|
||||
elif request.ws_protocol == "test-9":
|
||||
time.sleep(5)
|
||||
pass
|
||||
elif request.ws_protocol == "test 10":
|
||||
elif request.ws_protocol == "test-10":
|
||||
time.sleep(5)
|
||||
pass
|
||||
elif request.ws_protocol == "test 19":
|
||||
raise ValueError('Aborting (test 19)')
|
||||
elif request.ws_protocol == "test 20" or request.ws_protocol == "test 17":
|
||||
elif request.ws_protocol == "test-19":
|
||||
raise ValueError('Aborting (test-19)')
|
||||
elif request.ws_protocol == "test-20" or request.ws_protocol == "test-17":
|
||||
time.sleep(10)
|
||||
pass
|
||||
elif request.ws_protocol == "test 22":
|
||||
elif request.ws_protocol == "test-22":
|
||||
time.sleep(60)
|
||||
pass
|
||||
else:
|
||||
pass
|
||||
|
||||
def web_socket_transfer_data(request):
|
||||
if request.ws_protocol == "test 2.1" or request.ws_protocol == "test 2.2":
|
||||
if request.ws_protocol == "test-2.1" or request.ws_protocol == "test-2.2":
|
||||
msgutil.close_connection(request)
|
||||
elif request.ws_protocol == "test 6":
|
||||
elif request.ws_protocol == "test-6":
|
||||
resp = "wrong message"
|
||||
if msgutil.receive_message(request) == "1":
|
||||
resp = "2"
|
||||
@ -46,7 +46,7 @@ def web_socket_transfer_data(request):
|
||||
resp = "あいうえお"
|
||||
msgutil.send_message(request, resp.decode('utf-8'))
|
||||
msgutil.close_connection(request)
|
||||
elif request.ws_protocol == "test 7":
|
||||
elif request.ws_protocol == "test-7":
|
||||
try:
|
||||
while not request.client_terminated:
|
||||
msgutil.receive_message(request)
|
||||
@ -59,29 +59,29 @@ def web_socket_transfer_data(request):
|
||||
msgutil.send_message(request, "server data")
|
||||
time.sleep(30)
|
||||
msgutil.close_connection(request, True)
|
||||
elif request.ws_protocol == "test 10":
|
||||
elif request.ws_protocol == "test-10":
|
||||
msgutil.close_connection(request)
|
||||
elif request.ws_protocol == "test 11":
|
||||
elif request.ws_protocol == "test-11":
|
||||
resp = "wrong message"
|
||||
if msgutil.receive_message(request) == "client data":
|
||||
resp = "server data"
|
||||
msgutil.send_message(request, resp.decode('utf-8'))
|
||||
msgutil.close_connection(request)
|
||||
elif request.ws_protocol == "test 12":
|
||||
elif request.ws_protocol == "test-12":
|
||||
msgutil.close_connection(request)
|
||||
elif request.ws_protocol == "test 13":
|
||||
elif request.ws_protocol == "test-13":
|
||||
# first one binary message containing the byte 0x61 ('a')
|
||||
request.connection.write('\xff\x01\x61')
|
||||
# after a bad utf8 message
|
||||
request.connection.write('\x01\x61\xff')
|
||||
msgutil.close_connection(request)
|
||||
elif request.ws_protocol == "test 14":
|
||||
elif request.ws_protocol == "test-14":
|
||||
msgutil.close_connection(request)
|
||||
msgutil.send_message(request, "server data")
|
||||
elif request.ws_protocol == "test 15":
|
||||
elif request.ws_protocol == "test-15":
|
||||
msgutil.close_connection(request, True)
|
||||
return
|
||||
elif request.ws_protocol == "test 17" or request.ws_protocol == "test 21":
|
||||
elif request.ws_protocol == "test-17" or request.ws_protocol == "test-21":
|
||||
time.sleep(5)
|
||||
resp = "wrong message"
|
||||
if msgutil.receive_message(request) == "client data":
|
||||
@ -90,7 +90,7 @@ def web_socket_transfer_data(request):
|
||||
time.sleep(5)
|
||||
msgutil.close_connection(request)
|
||||
time.sleep(5)
|
||||
elif request.ws_protocol == "test 20":
|
||||
elif request.ws_protocol == "test-20":
|
||||
msgutil.send_message(request, "server data")
|
||||
msgutil.close_connection(request)
|
||||
while not request.client_terminated:
|
||||
|
@ -189,9 +189,9 @@ function test1()
|
||||
// is empty
|
||||
function test2()
|
||||
{
|
||||
var ws1 = CreateTestWS("ws://mochi.test:8888/tests/content/base/test/file_websocket", "test 2.1");
|
||||
var ws1 = CreateTestWS("ws://mochi.test:8888/tests/content/base/test/file_websocket", "test-2.1");
|
||||
current_test--; // CreateTestWS incremented this
|
||||
var ws2 = CreateTestWS("ws://mochi.test:8888/tests/content/base/test/file_websocket", "test 2.2");
|
||||
var ws2 = CreateTestWS("ws://mochi.test:8888/tests/content/base/test/file_websocket", "test-2.2");
|
||||
|
||||
var ws2CanConnect = false;
|
||||
|
||||
@ -204,7 +204,7 @@ function test2()
|
||||
|
||||
ws2.onopen = function()
|
||||
{
|
||||
ok(ws2CanConnect, "shouldn't connect yet in test 2!");
|
||||
ok(ws2CanConnect, "shouldn't connect yet in test-2!");
|
||||
doTest(3);
|
||||
}
|
||||
}
|
||||
@ -224,10 +224,10 @@ function test4()
|
||||
{
|
||||
try {
|
||||
var ws = CreateTestWS("file_websocket");
|
||||
ok(false, "test 4 failed");
|
||||
ok(false, "test-4 failed");
|
||||
}
|
||||
catch (e) {
|
||||
ok(true, "test 4 failed");
|
||||
ok(true, "test-4 failed");
|
||||
}
|
||||
doTest(5);
|
||||
}
|
||||
@ -249,12 +249,20 @@ function test5()
|
||||
catch (e) {
|
||||
ok(true, "couldn't accept any not printable ASCII character in the protocol parameter");
|
||||
}
|
||||
current_test--; // CreateTestWS incremented this
|
||||
try {
|
||||
var ws = CreateTestWS("ws://mochi.test:8888/tests/content/base/test/file_websocket", "test 5");
|
||||
ok(false, "U+0020 not acceptable in protocol parameter");
|
||||
}
|
||||
catch (e) {
|
||||
ok(true, "U+0020 not acceptable in protocol parameter");
|
||||
}
|
||||
doTest(6);
|
||||
}
|
||||
|
||||
function test6()
|
||||
{
|
||||
var ws = CreateTestWS("ws://mochi.test:8888/tests/content/base/test/file_websocket", "test 6");
|
||||
var ws = CreateTestWS("ws://mochi.test:8888/tests/content/base/test/file_websocket", "test-6");
|
||||
var counter = 1;
|
||||
ws.onopen = function()
|
||||
{
|
||||
@ -263,7 +271,7 @@ function test6()
|
||||
ws.onmessage = function(e)
|
||||
{
|
||||
if (counter == 5) {
|
||||
ok(e.data == "あいうえお", "test 6 counter 5 data ok");
|
||||
ok(e.data == "あいうえお", "test-6 counter 5 data ok");
|
||||
ws.close();
|
||||
doTest(7);
|
||||
} else {
|
||||
@ -286,7 +294,7 @@ function test7()
|
||||
current_test++;
|
||||
doTest(8);
|
||||
|
||||
// var ws = CreateTestWS("ws://mochi.test:8888/tests/content/base/test/file_websocket", "test 7");
|
||||
// var ws = CreateTestWS("ws://mochi.test:8888/tests/content/base/test/file_websocket", "test-7");
|
||||
// ws.onopen = function()
|
||||
// {
|
||||
// ws.close();
|
||||
@ -300,7 +308,7 @@ function test7()
|
||||
|
||||
function test8()
|
||||
{
|
||||
var ws = CreateTestWS("ws://mochi.test:8888/tests/content/base/test/file_websocket", "test 8");
|
||||
var ws = CreateTestWS("ws://mochi.test:8888/tests/content/base/test/file_websocket", "test-8");
|
||||
ws.onopen = function()
|
||||
{
|
||||
ws.close();
|
||||
@ -314,7 +322,7 @@ function test8()
|
||||
|
||||
function test9()
|
||||
{
|
||||
var ws = CreateTestWS("ws://mochi.test:8888/tests/content/base/test/file_websocket", "test 9");
|
||||
var ws = CreateTestWS("ws://mochi.test:8888/tests/content/base/test/file_websocket", "test-9");
|
||||
ws.onopen = shouldNotOpen;
|
||||
ws.onclose = function(e)
|
||||
{
|
||||
@ -327,7 +335,7 @@ function test9()
|
||||
|
||||
function test10()
|
||||
{
|
||||
var ws = CreateTestWS("ws://mochi.test:8888/tests/content/base/test/file_websocket", "test 10");
|
||||
var ws = CreateTestWS("ws://mochi.test:8888/tests/content/base/test/file_websocket", "test-10");
|
||||
ws.onclose = shouldCloseCleanly;
|
||||
|
||||
try {
|
||||
@ -345,25 +353,25 @@ function test10()
|
||||
|
||||
function test11()
|
||||
{
|
||||
var ws = CreateTestWS("ws://mochi.test:8888/tests/content/base/test/file_websocket", "test 11");
|
||||
ok(ws.readyState == 0, "create bad readyState in test 11!");
|
||||
var ws = CreateTestWS("ws://mochi.test:8888/tests/content/base/test/file_websocket", "test-11");
|
||||
ok(ws.readyState == 0, "create bad readyState in test-11!");
|
||||
ws.onopen = function()
|
||||
{
|
||||
ok(ws.readyState == 1, "open bad readyState in test 11!");
|
||||
ok(ws.readyState == 1, "open bad readyState in test-11!");
|
||||
ws.send("client data");
|
||||
}
|
||||
ws.onmessage = function(e)
|
||||
{
|
||||
ok(e.data == "server data", "bad received message in test 11!");
|
||||
ok(e.data == "server data", "bad received message in test-11!");
|
||||
ws.close();
|
||||
|
||||
// this ok() is disabled due to a race condition - it state may have
|
||||
// advanced through 2 (closing) and into 3 (closed) before it is evald
|
||||
// ok(ws.readyState == 2, "onmessage bad readyState in test 11!");
|
||||
// ok(ws.readyState == 2, "onmessage bad readyState in test-11!");
|
||||
}
|
||||
ws.onclose = function(e)
|
||||
{
|
||||
ok(ws.readyState == 3, "onclose bad readyState in test 11!");
|
||||
ok(ws.readyState == 3, "onclose bad readyState in test-11!");
|
||||
shouldCloseCleanly(e);
|
||||
doTest(12);
|
||||
}
|
||||
@ -371,7 +379,7 @@ function test11()
|
||||
|
||||
function test12()
|
||||
{
|
||||
var ws = CreateTestWS("ws://mochi.test:8888/tests/content/base/test/file_websocket", "test 12");
|
||||
var ws = CreateTestWS("ws://mochi.test:8888/tests/content/base/test/file_websocket", "test-12");
|
||||
ws.onopen = function()
|
||||
{
|
||||
try {
|
||||
@ -384,7 +392,7 @@ function test12()
|
||||
}
|
||||
ws.close();
|
||||
|
||||
// there isnt really a server implementation of test 12, so just
|
||||
// there isnt really a server implementation of test-12, so just
|
||||
// ignore an error
|
||||
ws.onerror = function()
|
||||
{
|
||||
@ -400,7 +408,7 @@ function test13()
|
||||
// protocol stack typically closes down after reporting a protocol level error - trying
|
||||
// to resync is too dangerous
|
||||
|
||||
var ws = CreateTestWS("ws://mochi.test:8888/tests/content/base/test/file_websocket", "test 13");
|
||||
var ws = CreateTestWS("ws://mochi.test:8888/tests/content/base/test/file_websocket", "test-13");
|
||||
ws._timesCalledOnError = 0;
|
||||
ws.onerror = function()
|
||||
{
|
||||
@ -415,7 +423,7 @@ function test13()
|
||||
|
||||
function test14()
|
||||
{
|
||||
var ws = CreateTestWS("ws://mochi.test:8888/tests/content/base/test/file_websocket", "test 14");
|
||||
var ws = CreateTestWS("ws://mochi.test:8888/tests/content/base/test/file_websocket", "test-14");
|
||||
ws.onmessage = function()
|
||||
{
|
||||
ok(false, "shouldn't received message after the server sent the close frame");
|
||||
@ -429,7 +437,7 @@ function test14()
|
||||
|
||||
function test15()
|
||||
{
|
||||
var ws = CreateTestWS("ws://mochi.test:8888/tests/content/base/test/file_websocket", "test 15");
|
||||
var ws = CreateTestWS("ws://mochi.test:8888/tests/content/base/test/file_websocket", "test-15");
|
||||
ws.onclose = function(e)
|
||||
{
|
||||
shouldCloseNotCleanly(e);
|
||||
@ -445,7 +453,7 @@ function test15()
|
||||
|
||||
function test16()
|
||||
{
|
||||
var ws = CreateTestWS("ws://mochi.test:8888/tests/content/base/test/file_websocket", "test 16");
|
||||
var ws = CreateTestWS("ws://mochi.test:8888/tests/content/base/test/file_websocket", "test-16");
|
||||
ws.onopen = function()
|
||||
{
|
||||
ws.close();
|
||||
@ -469,7 +477,7 @@ var status_test17 = "not started";
|
||||
|
||||
window._test17 = function()
|
||||
{
|
||||
var local_ws = new WebSocket("ws://mochi.test:8888/tests/content/base/test/file_websocket", "test 17");
|
||||
var local_ws = new WebSocket("ws://mochi.test:8888/tests/content/base/test/file_websocket", "test-17");
|
||||
local_ws._testNumber = "local17";
|
||||
local_ws._testNumber = current_test++;
|
||||
|
||||
@ -489,14 +497,14 @@ window._test17 = function()
|
||||
|
||||
local_ws.onmessage = function(e)
|
||||
{
|
||||
ok(e.data == "server data", "Bad message in test 17");
|
||||
ok(e.data == "server data", "Bad message in test-17");
|
||||
status_test17 = "got message";
|
||||
forcegc();
|
||||
};
|
||||
|
||||
local_ws.onclose = function(e)
|
||||
{
|
||||
ok(status_test17 == "got message", "Didn't got message in test 17!");
|
||||
ok(status_test17 == "got message", "Didn't got message in test-17!");
|
||||
shouldCloseCleanly(e);
|
||||
status_test17 = "closed";
|
||||
forcegc();
|
||||
@ -531,7 +539,7 @@ function test18()
|
||||
|
||||
function test19()
|
||||
{
|
||||
var ws = CreateTestWS("ws://mochi.test:8888/tests/content/base/test/file_websocket", "test 19");
|
||||
var ws = CreateTestWS("ws://mochi.test:8888/tests/content/base/test/file_websocket", "test-19");
|
||||
ws.onopen = shouldNotOpen;
|
||||
ws.onclose = function(e)
|
||||
{
|
||||
@ -542,7 +550,7 @@ function test19()
|
||||
|
||||
window._test20 = function()
|
||||
{
|
||||
var local_ws = new WebSocket("ws://mochi.test:8888/tests/content/base/test/file_websocket", "test 20");
|
||||
var local_ws = new WebSocket("ws://mochi.test:8888/tests/content/base/test/file_websocket", "test-20");
|
||||
local_ws._testNumber = "local20";
|
||||
local_ws._testNumber = current_test++;
|
||||
|
||||
@ -571,7 +579,7 @@ var timeoutTest21;
|
||||
|
||||
window._test21 = function()
|
||||
{
|
||||
var local_ws = new WebSocket("ws://mochi.test:8888/tests/content/base/test/file_websocket", "test 21");
|
||||
var local_ws = new WebSocket("ws://mochi.test:8888/tests/content/base/test/file_websocket", "test-21");
|
||||
local_ws._testNumber = current_test++;
|
||||
|
||||
local_ws.onopen = function(e)
|
||||
@ -579,7 +587,7 @@ window._test21 = function()
|
||||
e.target.send("client data");
|
||||
timeoutTest21 = setTimeout(function()
|
||||
{
|
||||
ok(false, "Didn't received message on test 21!");
|
||||
ok(false, "Didn't received message on test-21!");
|
||||
}, 15000);
|
||||
forcegc();
|
||||
e.target.onopen = null;
|
||||
@ -594,7 +602,7 @@ window._test21 = function()
|
||||
local_ws.onmessage = function(e)
|
||||
{
|
||||
clearTimeout(timeoutTest21);
|
||||
ok(e.data == "server data", "Bad message in test 21");
|
||||
ok(e.data == "server data", "Bad message in test-21");
|
||||
forcegc();
|
||||
e.target.onmessage = null;
|
||||
forcegc();
|
||||
@ -618,7 +626,7 @@ function test21()
|
||||
|
||||
function test22()
|
||||
{
|
||||
var ws = CreateTestWS("ws://mochi.test:8888/tests/content/base/test/file_websocket", "test 22");
|
||||
var ws = CreateTestWS("ws://mochi.test:8888/tests/content/base/test/file_websocket", "test-22");
|
||||
ws.onopen = shouldNotOpen;
|
||||
ws.onclose = function(e)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user