Title: [131467] trunk/Source/WebCore
Revision
131467
Author
[email protected]
Date
2012-10-16 09:56:17 -0700 (Tue, 16 Oct 2012)

Log Message

Re-order CachedRawResource::data() to set m_data earlier
https://bugs.webkit.org/show_bug.cgi?id=99361

Reviewed by Adam Barth.

Currently, we calculate the diff between the data parameter and m_data, call
dataReceived(), then set m_data to data. If something inside dataReceived()
tries to access m_data via CachedResource::resourceBuffer(), it will see the
old data instead of the new data, which seems inconsistent.

No new tests, as no one appears to try to access m_data within dataReceived() currently.

* loader/cache/CachedRawResource.cpp:
(WebCore::CachedRawResource::data):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (131466 => 131467)


--- trunk/Source/WebCore/ChangeLog	2012-10-16 16:52:26 UTC (rev 131466)
+++ trunk/Source/WebCore/ChangeLog	2012-10-16 16:56:17 UTC (rev 131467)
@@ -1,3 +1,20 @@
+2012-10-16  Nate Chapin  <[email protected]>
+
+        Re-order CachedRawResource::data() to set m_data earlier
+        https://bugs.webkit.org/show_bug.cgi?id=99361
+
+        Reviewed by Adam Barth.
+
+        Currently, we calculate the diff between the data parameter and m_data, call
+        dataReceived(), then set m_data to data. If something inside dataReceived()
+        tries to access m_data via CachedResource::resourceBuffer(), it will see the
+        old data instead of the new data, which seems inconsistent.
+
+        No new tests, as no one appears to try to access m_data within dataReceived() currently.
+
+        * loader/cache/CachedRawResource.cpp:
+        (WebCore::CachedRawResource::data):
+
 2012-10-16  Julien Chaffraix  <[email protected]>
 
         Fold setCellLogicalWidths logic into RenderTableSection layout

Modified: trunk/Source/WebCore/loader/cache/CachedRawResource.cpp (131466 => 131467)


--- trunk/Source/WebCore/loader/cache/CachedRawResource.cpp	2012-10-16 16:52:26 UTC (rev 131466)
+++ trunk/Source/WebCore/loader/cache/CachedRawResource.cpp	2012-10-16 16:56:17 UTC (rev 131467)
@@ -45,20 +45,16 @@
 void CachedRawResource::data(PassRefPtr<ResourceBuffer> data, bool allDataReceived)
 {
     CachedResourceHandle<CachedRawResource> protect(this);
+    const char* incrementalData = 0;
+    size_t incrementalDataLength = 0;
     if (data) {
         // If we are buffering data, then we are saving the buffer in m_data and need to manually
         // calculate the incremental data. If we are not buffering, then m_data will be null and
         // the buffer contains only the incremental data.
         size_t previousDataLength = (m_options.shouldBufferData == BufferData) ? encodedSize() : 0;
         ASSERT(data->size() >= previousDataLength);
-        const char* incrementalData = data->data() + previousDataLength;
-        size_t incrementalDataLength = data->size() - previousDataLength;
-
-        if (incrementalDataLength) {
-            CachedResourceClientWalker<CachedRawResourceClient> w(m_clients);
-            while (CachedRawResourceClient* c = w.next())
-                c->dataReceived(this, incrementalData, incrementalDataLength);
-        }
+        incrementalData = data->data() + previousDataLength;
+        incrementalDataLength = data->size() - previousDataLength;
     }
     
     if (m_options.shouldBufferData == BufferData) {
@@ -66,6 +62,12 @@
             setEncodedSize(data->size());
         m_data = data;
     }
+    
+    if (incrementalDataLength) {
+        CachedResourceClientWalker<CachedRawResourceClient> w(m_clients);
+        while (CachedRawResourceClient* c = w.next())
+            c->dataReceived(this, incrementalData, incrementalDataLength);
+    }
     CachedResource::data(m_data, allDataReceived);
 }
 
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to