Title: [199431] releases/WebKitGTK/webkit-2.12
Revision
199431
Author
[email protected]
Date
2016-04-13 01:43:25 -0700 (Wed, 13 Apr 2016)

Log Message

Merge r198530 - SharedBuffer::copy() can cause a segmentation fault.
https://bugs.webkit.org/show_bug.cgi?id=155739

Reviewed by Ryosuke Niwa.

Based on a Blink patch by Huang Dongsung <[email protected]>.
<https://src.chromium.org/viewvc/blink?revision=153850&view=revision>

After SharedBuffer::copy(), SharedBuffer::append() can cause segmentation fault,
because copy() calls clone->m_buffer.append(m_segments[i], segmentSize) even if
'i' is the last index. The data size of m_segments.last() is often less than
segmentSize. So, in the cloned instance m_size < (m_buffer.size() + SUM(m_segments[i].size())).
This patch appends the exact size of the last segment instead of segmentSize.

Tested by TestWebKitAPI SharedBufferTest::copy

* platform/SharedBuffer.cpp:
(SharedBuffer::copy):

Tools:
[Win] SharedBuffer::copy() can cause a segmentation fault.
https://bugs.webkit.org/show_bug.cgi?id=155739

Reviewed by Ryosuke Niwa.

* TestWebKitAPI/PlatformWin.cmake: Build and run the
SharedBuffer tests.

Modified Paths

Diff

Modified: releases/WebKitGTK/webkit-2.12/Source/WebCore/ChangeLog (199430 => 199431)


--- releases/WebKitGTK/webkit-2.12/Source/WebCore/ChangeLog	2016-04-13 08:41:56 UTC (rev 199430)
+++ releases/WebKitGTK/webkit-2.12/Source/WebCore/ChangeLog	2016-04-13 08:43:25 UTC (rev 199431)
@@ -1,3 +1,24 @@
+2016-03-22  Brent Fulgham  <[email protected]>
+
+        SharedBuffer::copy() can cause a segmentation fault.
+        https://bugs.webkit.org/show_bug.cgi?id=155739
+
+        Reviewed by Ryosuke Niwa.
+
+        Based on a Blink patch by Huang Dongsung <[email protected]>.
+        <https://src.chromium.org/viewvc/blink?revision=153850&view=revision>
+
+        After SharedBuffer::copy(), SharedBuffer::append() can cause segmentation fault,
+        because copy() calls clone->m_buffer.append(m_segments[i], segmentSize) even if
+        'i' is the last index. The data size of m_segments.last() is often less than
+        segmentSize. So, in the cloned instance m_size < (m_buffer.size() + SUM(m_segments[i].size())).
+        This patch appends the exact size of the last segment instead of segmentSize.
+
+        Tested by TestWebKitAPI SharedBufferTest::copy
+
+        * platform/SharedBuffer.cpp:
+        (SharedBuffer::copy): 
+
 2016-03-22  Alberto Garcia  <[email protected]>
 
         Unreviewed typo fix.

Modified: releases/WebKitGTK/webkit-2.12/Source/WebCore/platform/SharedBuffer.cpp (199430 => 199431)


--- releases/WebKitGTK/webkit-2.12/Source/WebCore/platform/SharedBuffer.cpp	2016-04-13 08:41:56 UTC (rev 199430)
+++ releases/WebKitGTK/webkit-2.12/Source/WebCore/platform/SharedBuffer.cpp	2016-04-13 08:43:25 UTC (rev 199431)
@@ -264,8 +264,14 @@
     clone->m_buffer->data.append(m_buffer->data.data(), m_buffer->data.size());
 
 #if !USE(NETWORK_CFDATA_ARRAY_CALLBACK)
-    for (char* segment : m_segments)
-        clone->m_buffer->data.append(segment, segmentSize);
+    if (!m_segments.isEmpty()) {
+        unsigned lastIndex = m_segments.size() - 1;
+        for (unsigned i = 0; i < lastIndex; ++i)
+            clone->m_buffer->data.append(m_segments[i], segmentSize);
+
+        unsigned sizeOfLastSegment = m_size - m_buffer->data.size() - lastIndex * segmentSize;
+        clone->m_buffer->data.append(m_segments.last(), sizeOfLastSegment);
+    }
 #else
     for (auto& data : m_dataArray)
         clone->m_dataArray.append(data.get());

Modified: releases/WebKitGTK/webkit-2.12/Tools/ChangeLog (199430 => 199431)


--- releases/WebKitGTK/webkit-2.12/Tools/ChangeLog	2016-04-13 08:41:56 UTC (rev 199430)
+++ releases/WebKitGTK/webkit-2.12/Tools/ChangeLog	2016-04-13 08:43:25 UTC (rev 199431)
@@ -1,3 +1,13 @@
+2016-03-21  Brent Fulgham  <[email protected]>
+
+        [Win] SharedBuffer::copy() can cause a segmentation fault.
+        https://bugs.webkit.org/show_bug.cgi?id=155739
+
+        Reviewed by Ryosuke Niwa.
+
+        * TestWebKitAPI/PlatformWin.cmake: Build and run the
+        SharedBuffer tests.
+
 2016-03-16  Jiewen Tan  <[email protected]>
 
         URL Parsing should signal failure for illegal IDN

Modified: releases/WebKitGTK/webkit-2.12/Tools/TestWebKitAPI/PlatformWin.cmake (199430 => 199431)


--- releases/WebKitGTK/webkit-2.12/Tools/TestWebKitAPI/PlatformWin.cmake	2016-04-13 08:41:56 UTC (rev 199430)
+++ releases/WebKitGTK/webkit-2.12/Tools/TestWebKitAPI/PlatformWin.cmake	2016-04-13 08:43:25 UTC (rev 199431)
@@ -18,6 +18,7 @@
 include_directories(
     ${DERIVED_SOURCES_DIR}
     ${DERIVED_SOURCES_DIR}/ForwardingHeaders
+    ${DERIVED_SOURCES_DIR}/ForwardingHeaders/_javascript_Core
     ${TESTWEBKITAPI_DIR}/win
     ${DERIVED_SOURCES_DIR}/WebKit/Interfaces
 )
@@ -42,6 +43,7 @@
     ${TESTWEBKITAPI_DIR}/Tests/WebCore/CSSParser.cpp
     ${TESTWEBKITAPI_DIR}/Tests/WebCore/LayoutUnit.cpp
     ${TESTWEBKITAPI_DIR}/Tests/WebCore/ParsedContentRange.cpp
+    ${TESTWEBKITAPI_DIR}/Tests/WebCore/SharedBuffer.cpp
     ${TESTWEBKITAPI_DIR}/Tests/WebCore/TimeRanges.cpp
     ${TESTWEBKITAPI_DIR}/Tests/WebCore/URL.cpp
 )
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to