Title: [252847] trunk
- Revision
- 252847
- Author
- [email protected]
- Date
- 2019-11-25 00:50:13 -0800 (Mon, 25 Nov 2019)
Log Message
REGRESSION (Safari 13): WebSocket payload is truncated when x-webkit-deflate-frame is used
https://bugs.webkit.org/show_bug.cgi?id=202401
<rdar://problem/55922632>
Reviewed by Alex Christensen.
Source/WebCore:
Test: http/tests/websocket/tests/hybi/deflate-extension.html
* Modules/websockets/WebSocketDeflater.cpp:
(WebCore::WebSocketDeflater::finish):
Make sure to continue calling deflate until all output data is flushed.
LayoutTests:
* http/tests/websocket/tests/hybi/deflate-extension-expected.txt: Added.
* http/tests/websocket/tests/hybi/deflate-extension.html: Added.
Modified Paths
Added Paths
Diff
Modified: trunk/LayoutTests/ChangeLog (252846 => 252847)
--- trunk/LayoutTests/ChangeLog 2019-11-25 08:47:45 UTC (rev 252846)
+++ trunk/LayoutTests/ChangeLog 2019-11-25 08:50:13 UTC (rev 252847)
@@ -1,3 +1,14 @@
+2019-11-25 Youenn Fablet <[email protected]>
+
+ REGRESSION (Safari 13): WebSocket payload is truncated when x-webkit-deflate-frame is used
+ https://bugs.webkit.org/show_bug.cgi?id=202401
+ <rdar://problem/55922632>
+
+ Reviewed by Alex Christensen.
+
+ * http/tests/websocket/tests/hybi/deflate-extension-expected.txt: Added.
+ * http/tests/websocket/tests/hybi/deflate-extension.html: Added.
+
2019-11-25 youenn fablet <[email protected]>
Mark imported/w3c/web-platform-tests/webrtc/RTCRtpReceiver-getSynchronizationSources.https.html as Slow
Added: trunk/LayoutTests/http/tests/websocket/tests/hybi/deflate-extension-expected.txt (0 => 252847)
--- trunk/LayoutTests/http/tests/websocket/tests/hybi/deflate-extension-expected.txt (rev 0)
+++ trunk/LayoutTests/http/tests/websocket/tests/hybi/deflate-extension-expected.txt 2019-11-25 08:50:13 UTC (rev 252847)
@@ -0,0 +1,13 @@
+Test WebSocket deflate-frame extension.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS event.data is firstMessage
+PASS event.data is secondMessage
+PASS event.data is thirdMessage
+onclose() was called.
+PASS closeEvent.wasClean is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
Added: trunk/LayoutTests/http/tests/websocket/tests/hybi/deflate-extension.html (0 => 252847)
--- trunk/LayoutTests/http/tests/websocket/tests/hybi/deflate-extension.html (rev 0)
+++ trunk/LayoutTests/http/tests/websocket/tests/hybi/deflate-extension.html 2019-11-25 08:50:13 UTC (rev 252847)
@@ -0,0 +1,73 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<script src=""
+</head>
+<body>
+<div id="description"></div>
+<div id="console"></div>
+<script>
+description("Test WebSocket deflate-frame extension.");
+
+window.jsTestIsAsync = true;
+
+var closeEvent;
+var ws;
+var messageIndex;
+
+function randomText(len) {
+ const allCharacters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
+ var randomText = ''
+ for (var i = 0; i < len; i++) {
+ var k = Math.floor(Math.random() * allCharacters.length)
+ randomText += allCharacters.charAt(k);
+ }
+ return randomText
+}
+
+var firstMessage = randomText(10000);
+var secondMessage = randomText(10000);
+var thirdMessage = randomText(10000);
+
+function doTest(queryIndex)
+{
+ var url = ""
+ ws = new WebSocket(url);
+ messageIndex = 0;
+
+ ws._onopen_ = function(event)
+ {
+ ws.send(firstMessage);
+ };
+
+ ws._onmessage_ = function(event)
+ {
+ if (messageIndex === 0) {
+ shouldBe("event.data", "firstMessage");
+ messageIndex += 1
+ ws.send(secondMessage);
+ } else if (messageIndex === 1) {
+ shouldBe("event.data", "secondMessage");
+ messageIndex += 1
+ ws.send(thirdMessage);
+ } else {
+ shouldBe("event.data", "thirdMessage");
+ ws.close();
+ }
+ };
+
+ ws._onclose_ = function(event)
+ {
+ debug("onclose() was called.");
+ closeEvent = event;
+ shouldBeTrue("closeEvent.wasClean");
+ finishJSTest();
+ };
+}
+
+doTest(0);
+
+</script>
+<script src=""
+</body>
+</html>
Modified: trunk/Source/WebCore/ChangeLog (252846 => 252847)
--- trunk/Source/WebCore/ChangeLog 2019-11-25 08:47:45 UTC (rev 252846)
+++ trunk/Source/WebCore/ChangeLog 2019-11-25 08:50:13 UTC (rev 252847)
@@ -1,3 +1,17 @@
+2019-11-25 Youenn Fablet <[email protected]>
+
+ REGRESSION (Safari 13): WebSocket payload is truncated when x-webkit-deflate-frame is used
+ https://bugs.webkit.org/show_bug.cgi?id=202401
+ <rdar://problem/55922632>
+
+ Reviewed by Alex Christensen.
+
+ Test: http/tests/websocket/tests/hybi/deflate-extension.html
+
+ * Modules/websockets/WebSocketDeflater.cpp:
+ (WebCore::WebSocketDeflater::finish):
+ Make sure to continue calling deflate until all output data is flushed.
+
2019-11-24 Sunny He <[email protected]>
Ensure SpeechSynthesis::cancel() correctly clears m_currentSpeechUtterance
Modified: trunk/Source/WebCore/Modules/websockets/WebSocketDeflater.cpp (252846 => 252847)
--- trunk/Source/WebCore/Modules/websockets/WebSocketDeflater.cpp 2019-11-25 08:47:45 UTC (rev 252846)
+++ trunk/Source/WebCore/Modules/websockets/WebSocketDeflater.cpp 2019-11-25 08:50:13 UTC (rev 252847)
@@ -101,11 +101,13 @@
size_t availableCapacity = m_buffer.size() - writePosition;
setStreamParameter(m_stream.get(), 0, 0, m_buffer.data() + writePosition, availableCapacity);
int result = deflate(m_stream.get(), Z_SYNC_FLUSH);
- m_buffer.shrink(writePosition + availableCapacity - m_stream->avail_out);
- if (result == Z_OK)
- break;
- if (result != Z_BUF_ERROR)
- return false;
+ if (m_stream->avail_out) {
+ m_buffer.shrink(writePosition + availableCapacity - m_stream->avail_out);
+ if (result == Z_OK)
+ break;
+ if (result != Z_BUF_ERROR)
+ return false;
+ }
}
// Remove 4 octets from the tail as the specification requires.
if (m_buffer.size() <= 4)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes