Changeset 87883 in webkit
- Timestamp:
- Jun 2, 2011 1:12:04 AM (13 years ago)
- Location:
- trunk
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r87881 r87883 1 2011-06-02 Yuta Kitamura <yutak@chromium.org> 2 3 Reviewed by Kent Tamura. 4 5 WebSocket: Call WebSocketChannel::fail() when WebSocketHandshake has failed 6 https://bugs.webkit.org/show_bug.cgi?id=61841 7 8 * http/tests/websocket/tests/bad-handshake-crash-expected.txt: 9 Now the error message starts with a capital letter. 10 1 11 2011-06-01 Kent Tamura <tkent@chromium.org> 2 12 -
trunk/LayoutTests/http/tests/websocket/tests/bad-handshake-crash-expected.txt
r57760 r87883 1 CONSOLE MESSAGE: line 0: invalid UTF-8 sequence in header name1 CONSOLE MESSAGE: line 0: Invalid UTF-8 sequence in header name 2 2 Make sure WebSocket doesn't crash with bad handshake message. 3 3 -
trunk/Source/WebCore/ChangeLog
r87882 r87883 1 2011-06-02 Yuta Kitamura <yutak@chromium.org> 2 3 Reviewed by Kent Tamura. 4 5 WebSocket: Call WebSocketChannel::fail() when WebSocketHandshake has failed 6 https://bugs.webkit.org/show_bug.cgi?id=61841 7 8 There is no change in behavior except that capitalization of a few error messages 9 has been changed. No new tests are added. 10 11 * websockets/WebSocketChannel.cpp: 12 (WebCore::WebSocketChannel::processBuffer): 13 Pass m_handshake.failureReason() to fail() if the handshake has failed. 14 * websockets/WebSocketHandshake.cpp: 15 Replace occurrences of m_handle->addMessage() with assignments to m_failureReason. 16 Change capitalization of a few messages so that all messages start with a capital letter. 17 (WebCore::WebSocketHandshake::readServerHandshake): 18 (WebCore::WebSocketHandshake::failureReason): 19 (WebCore::WebSocketHandshake::readStatusLine): 20 (WebCore::WebSocketHandshake::readHTTPHeaders): 21 (WebCore::WebSocketHandshake::checkResponseHeaders): 22 * websockets/WebSocketHandshake.h: 23 Add failureReason(), which returns a string that describes why WebSocket handshake 24 has failed. 25 1 26 2011-06-01 Dan Bernstein <mitz@apple.com> 2 27 -
trunk/Source/WebCore/websockets/WebSocketChannel.cpp
r87876 r87883 331 331 return m_buffer; 332 332 } 333 ASSERT(m_handshake.mode() == WebSocketHandshake::Failed); 333 334 LOG(Network, "WebSocketChannel %p connection failed", this); 334 335 skipBuffer(headerLength); 335 336 m_shouldDiscardReceivedData = true; 336 if (!m_closed) 337 m_handle->disconnect(); 337 fail(m_handshake.failureReason()); 338 338 return false; 339 339 } -
trunk/Source/WebCore/websockets/WebSocketHandshake.cpp
r86659 r87883 1 1 /* 2 * Copyright (C) 20 09Google Inc. All rights reserved.2 * Copyright (C) 2011 Google Inc. All rights reserved. 3 3 * Copyright (C) Research In Motion Limited 2011. All rights reserved. 4 4 * … … 320 320 return -1; 321 321 if (statusCode == -1) { 322 m_mode = Failed; 322 m_mode = Failed; // m_failureReason is set inside readStatusLine(). 323 323 return len; 324 324 } … … 328 328 if (statusCode != 101) { 329 329 m_mode = Failed; 330 m_ context->addMessage(JSMessageSource, LogMessageType, ErrorMessageLevel, "Unexpected response code: " + String::number(statusCode), 0, clientOrigin(), 0);330 m_failureReason = "Unexpected response code: " + String::number(statusCode); 331 331 return len; 332 332 } … … 340 340 if (!p) { 341 341 LOG(Network, "readHTTPHeaders failed"); 342 m_mode = Failed; 342 m_mode = Failed; // m_failureReason is set inside readHTTPHeaders(). 343 343 return len; 344 344 } … … 365 365 { 366 366 return m_mode; 367 } 368 369 String WebSocketHandshake::failureReason() const 370 { 371 return m_failureReason; 367 372 } 368 373 … … 441 446 // The caller isn't prepared to deal with null bytes in status 442 447 // line. WebSockets specification doesn't prohibit this, but HTTP 443 // does, so we'll just treat this as an error. 444 m_ context->addMessage(JSMessageSource, LogMessageType, ErrorMessageLevel, "Status line contains embedded null", 0, clientOrigin(), 0);448 // does, so we'll just treat this as an error. 449 m_failureReason = "Status line contains embedded null"; 445 450 return p + 1 - header; 446 451 } else if (*p == '\n') … … 453 458 int lineLength = end - header; 454 459 if (lineLength > maximumLength) { 455 m_ context->addMessage(JSMessageSource, LogMessageType, ErrorMessageLevel, "Status line is too long", 0, clientOrigin(), 0);460 m_failureReason = "Status line is too long"; 456 461 return maximumLength; 457 462 } … … 459 464 // The line must end with "\r\n". 460 465 if (lineLength < 2 || *(end - 2) != '\r') { 461 m_ context->addMessage(JSMessageSource, LogMessageType, ErrorMessageLevel, "Status line does not end with CRLF", 0, clientOrigin(), 0);466 m_failureReason = "Status line does not end with CRLF"; 462 467 return lineLength; 463 468 } 464 469 465 470 if (!space1 || !space2) { 466 m_ context->addMessage(JSMessageSource, LogMessageType, ErrorMessageLevel, "No response code found: " + trimConsoleMessage(header, lineLength - 2), 0, clientOrigin(), 0);471 m_failureReason = "No response code found: " + trimConsoleMessage(header, lineLength - 2); 467 472 return lineLength; 468 473 } … … 473 478 for (int i = 0; i < 3; ++i) 474 479 if (statusCodeString[i] < '0' || statusCodeString[i] > '9') { 475 m_ context->addMessage(JSMessageSource, LogMessageType, ErrorMessageLevel, "Invalid status code: " + statusCodeString, 0, clientOrigin(), 0);480 m_failureReason = "Invalid status code: " + statusCodeString; 476 481 return lineLength; 477 482 } … … 501 506 if (p + 1 < end && *(p + 1) == '\n') 502 507 return p + 2; 503 m_ context->addMessage(JSMessageSource, LogMessageType, ErrorMessageLevel, "CR doesn't follow LF at " + trimConsoleMessage(p, end - p), 0, clientOrigin(), 0);508 m_failureReason = "CR doesn't follow LF at " + trimConsoleMessage(p, end - p); 504 509 return 0; 505 510 } 506 m_ context->addMessage(JSMessageSource, LogMessageType, ErrorMessageLevel, "Unexpected CR in name at " + trimConsoleMessage(name.data(), name.size()), 0, clientOrigin(), 0);511 m_failureReason = "Unexpected CR in name at " + trimConsoleMessage(name.data(), name.size()); 507 512 return 0; 508 513 case '\n': 509 m_ context->addMessage(JSMessageSource, LogMessageType, ErrorMessageLevel, "Unexpected LF in name at " + trimConsoleMessage(name.data(), name.size()), 0, clientOrigin(), 0);514 m_failureReason = "Unexpected LF in name at " + trimConsoleMessage(name.data(), name.size()); 510 515 return 0; 511 516 case ':': … … 528 533 break; 529 534 case '\n': 530 m_ context->addMessage(JSMessageSource, LogMessageType, ErrorMessageLevel, "Unexpected LF in value at " + trimConsoleMessage(value.data(), value.size()), 0, clientOrigin(), 0);535 m_failureReason = "Unexpected LF in value at " + trimConsoleMessage(value.data(), value.size()); 531 536 return 0; 532 537 default: … … 539 544 } 540 545 if (p >= end || *p != '\n') { 541 m_ context->addMessage(JSMessageSource, LogMessageType, ErrorMessageLevel, "CR doesn't follow LF after value at " + trimConsoleMessage(p, end - p), 0, clientOrigin(), 0);546 m_failureReason = "CR doesn't follow LF after value at " + trimConsoleMessage(p, end - p); 542 547 return 0; 543 548 } … … 545 550 String valueStr = String::fromUTF8(value.data(), value.size()); 546 551 if (nameStr.isNull()) { 547 m_ context->addMessage(JSMessageSource, LogMessageType, ErrorMessageLevel, "invalid UTF-8 sequence in header name", 0, clientOrigin(), 0);552 m_failureReason = "Invalid UTF-8 sequence in header name"; 548 553 return 0; 549 554 } 550 555 if (valueStr.isNull()) { 551 m_ context->addMessage(JSMessageSource, LogMessageType, ErrorMessageLevel, "invalid UTF-8 sequence in header value", 0, clientOrigin(), 0);556 m_failureReason = "Invalid UTF-8 sequence in header value"; 552 557 return 0; 553 558 } … … 568 573 569 574 if (serverUpgrade.isNull()) { 570 m_ context->addMessage(JSMessageSource, LogMessageType, ErrorMessageLevel, "Error during WebSocket handshake: 'Upgrade' header is missing", 0, clientOrigin(), 0);575 m_failureReason = "Error during WebSocket handshake: 'Upgrade' header is missing"; 571 576 return false; 572 577 } 573 578 if (serverConnection.isNull()) { 574 m_ context->addMessage(JSMessageSource, LogMessageType, ErrorMessageLevel, "Error during WebSocket handshake: 'Connection' header is missing", 0, clientOrigin(), 0);579 m_failureReason = "Error during WebSocket handshake: 'Connection' header is missing"; 575 580 return false; 576 581 } 577 582 if (serverWebSocketOrigin.isNull()) { 578 m_ context->addMessage(JSMessageSource, LogMessageType, ErrorMessageLevel, "Error during WebSocket handshake: 'Sec-WebSocket-Origin' header is missing", 0, clientOrigin(), 0);583 m_failureReason = "Error during WebSocket handshake: 'Sec-WebSocket-Origin' header is missing"; 579 584 return false; 580 585 } 581 586 if (serverWebSocketLocation.isNull()) { 582 m_ context->addMessage(JSMessageSource, LogMessageType, ErrorMessageLevel, "Error during WebSocket handshake: 'Sec-WebSocket-Location' header is missing", 0, clientOrigin(), 0);587 m_failureReason = "Error during WebSocket handshake: 'Sec-WebSocket-Location' header is missing"; 583 588 return false; 584 589 } 585 590 586 591 if (!equalIgnoringCase(serverUpgrade, "websocket")) { 587 m_ context->addMessage(JSMessageSource, LogMessageType, ErrorMessageLevel, "Error during WebSocket handshake: 'Upgrade' header value is not 'WebSocket'", 0, clientOrigin(), 0);592 m_failureReason = "Error during WebSocket handshake: 'Upgrade' header value is not 'WebSocket'"; 588 593 return false; 589 594 } 590 595 if (!equalIgnoringCase(serverConnection, "upgrade")) { 591 m_ context->addMessage(JSMessageSource, LogMessageType, ErrorMessageLevel, "Error during WebSocket handshake: 'Connection' header value is not 'Upgrade'", 0, clientOrigin(), 0);596 m_failureReason = "Error during WebSocket handshake: 'Connection' header value is not 'Upgrade'"; 592 597 return false; 593 598 } 594 599 595 600 if (clientOrigin() != serverWebSocketOrigin) { 596 m_ context->addMessage(JSMessageSource, LogMessageType, ErrorMessageLevel, "Error during WebSocket handshake: origin mismatch: " + clientOrigin() + " != " + serverWebSocketOrigin, 0, clientOrigin(), 0);601 m_failureReason = "Error during WebSocket handshake: origin mismatch: " + clientOrigin() + " != " + serverWebSocketOrigin; 597 602 return false; 598 603 } 599 604 if (clientLocation() != serverWebSocketLocation) { 600 m_ context->addMessage(JSMessageSource, LogMessageType, ErrorMessageLevel, "Error during WebSocket handshake: location mismatch: " + clientLocation() + " != " + serverWebSocketLocation, 0, clientOrigin(), 0);605 m_failureReason = "Error during WebSocket handshake: location mismatch: " + clientLocation() + " != " + serverWebSocketLocation; 601 606 return false; 602 607 } 603 608 if (!m_clientProtocol.isEmpty() && m_clientProtocol != serverWebSocketProtocol) { 604 m_ context->addMessage(JSMessageSource, LogMessageType, ErrorMessageLevel, "Error during WebSocket handshake: protocol mismatch: " + m_clientProtocol + " != " + serverWebSocketProtocol, 0, clientOrigin(), 0);609 m_failureReason = "Error during WebSocket handshake: protocol mismatch: " + m_clientProtocol + " != " + serverWebSocketProtocol; 605 610 return false; 606 611 } -
trunk/Source/WebCore/websockets/WebSocketHandshake.h
r80252 r87883 72 72 int readServerHandshake(const char* header, size_t len); 73 73 Mode mode() const; 74 String failureReason() const; // Returns a string indicating the reason of failure if mode() == Failed. 74 75 75 76 String serverWebSocketOrigin() const; … … 106 107 107 108 WebSocketHandshakeResponse m_response; 109 110 String m_failureReason; 108 111 }; 109 112
Note: See TracChangeset
for help on using the changeset viewer.