Diff
Modified: trunk/Source/WebCore/ChangeLog (170754 => 170755)
--- trunk/Source/WebCore/ChangeLog 2014-07-03 16:19:07 UTC (rev 170754)
+++ trunk/Source/WebCore/ChangeLog 2014-07-03 17:05:41 UTC (rev 170755)
@@ -1,3 +1,22 @@
+2014-07-02 Anders Carlsson <ander...@apple.com>
+
+ Stop using EncoderAdapter/DecoderAdapter for FormData
+ https://bugs.webkit.org/show_bug.cgi?id=134571
+
+ Reviewed by Andreas Kling.
+
+ * WebCore.exp.in:
+ * platform/network/FormData.cpp:
+ (WebCore::encodeElement): Deleted.
+ (WebCore::decodeElement): Deleted.
+ (WebCore::FormData::encode): Deleted.
+ (WebCore::FormData::decode): Deleted.
+ * platform/network/FormData.h:
+ (WebCore::FormDataElement::encode):
+ (WebCore::FormDataElement::decode):
+ (WebCore::FormData::encode):
+ (WebCore::FormData::decode):
+
2014-07-03 Brady Eidson <beid...@apple.com>
Possible crash in IconDatabase in WebCore::IconDatabase::dispatchDidRemoveAllIconsOnMainThread
Modified: trunk/Source/WebCore/WebCore.exp.in (170754 => 170755)
--- trunk/Source/WebCore/WebCore.exp.in 2014-07-03 16:19:07 UTC (rev 170754)
+++ trunk/Source/WebCore/WebCore.exp.in 2014-07-03 17:05:41 UTC (rev 170755)
@@ -1303,7 +1303,6 @@
__ZN7WebCore8FormData15appendFileRangeERKN3WTF6StringExxdb
__ZN7WebCore8FormData6createEv
__ZN7WebCore8FormData6createEPKvm
-__ZN7WebCore8FormData6decodeERN3WTF7DecoderE
__ZN7WebCore8FormDataD1Ev
__ZN7WebCore8Gradient12addColorStopEfRKNS_5ColorE
__ZN7WebCore8GradientC1ERKNS_10FloatPointES3_
@@ -1970,7 +1969,6 @@
__ZNK7WebCore8Document6domainEv
__ZNK7WebCore8Document6loaderEv
__ZNK7WebCore8Document8settingsEv
-__ZNK7WebCore8FormData6encodeERN3WTF7EncoderE
__ZNK7WebCore8IntPointcv7CGPointEv
__ZNK7WebCore8Position10downstreamENS_27EditingBoundaryCrossingRuleE
__ZNK7WebCore8Position13containerNodeEv
Modified: trunk/Source/WebCore/platform/network/FormData.cpp (170754 => 170755)
--- trunk/Source/WebCore/platform/network/FormData.cpp 2014-07-03 16:19:07 UTC (rev 170754)
+++ trunk/Source/WebCore/platform/network/FormData.cpp 2014-07-03 17:05:41 UTC (rev 170755)
@@ -393,143 +393,4 @@
}
}
-static void encodeElement(Encoder& encoder, const FormDataElement& element)
-{
- encoder.encodeUInt32(static_cast<uint32_t>(element.m_type));
-
- switch (element.m_type) {
- case FormDataElement::Type::Data:
- encoder.encodeBytes(reinterpret_cast<const uint8_t*>(element.m_data.data()), element.m_data.size());
- return;
-
- case FormDataElement::Type::EncodedFile:
- encoder.encodeString(element.m_filename);
- encoder.encodeString(element.m_generatedFilename);
- encoder.encodeBool(element.m_shouldGenerateFile);
- encoder.encodeInt64(element.m_fileStart);
- encoder.encodeInt64(element.m_fileLength);
- encoder.encodeDouble(element.m_expectedFileModificationTime);
- return;
-
- case FormDataElement::Type::EncodedBlob:
- encoder.encodeString(element.m_url.string());
- return;
- }
-
- ASSERT_NOT_REACHED();
-}
-
-static bool decodeElement(Decoder& decoder, FormDataElement& element)
-{
- uint32_t type;
- if (!decoder.decodeUInt32(type))
- return false;
-
- switch (static_cast<FormDataElement::Type>(type)) {
- case FormDataElement::Type::Data: {
- element.m_type = FormDataElement::Type::Data;
- Vector<uint8_t> data;
- if (!decoder.decodeBytes(data))
- return false;
- size_t size = data.size();
- element.m_data.resize(size);
- memcpy(element.m_data.data(), data.data(), size);
- return true;
- }
-
- case FormDataElement::Type::EncodedFile: {
- element.m_type = static_cast<FormDataElement::Type>(type);
- String filenameOrURL;
- if (!decoder.decodeString(filenameOrURL))
- return false;
- if (static_cast<FormDataElement::Type>(type) == FormDataElement::Type::EncodedFile) {
- if (!decoder.decodeString(element.m_generatedFilename))
- return false;
- if (!decoder.decodeBool(element.m_shouldGenerateFile))
- return false;
- }
- int64_t fileStart;
- if (!decoder.decodeInt64(fileStart))
- return false;
- if (fileStart < 0)
- return false;
- int64_t fileLength;
- if (!decoder.decodeInt64(fileLength))
- return false;
- if (fileLength != BlobDataItem::toEndOfFile && fileLength < fileStart)
- return false;
- double expectedFileModificationTime;
- if (!decoder.decodeDouble(expectedFileModificationTime))
- return false;
-
- element.m_filename = filenameOrURL;
- element.m_fileStart = fileStart;
- element.m_fileLength = fileLength;
- element.m_expectedFileModificationTime = expectedFileModificationTime;
- return true;
- }
-
- case FormDataElement::Type::EncodedBlob:
- element.m_type = FormDataElement::Type::EncodedBlob;
- String blobURLString;
- if (!decoder.decodeString(blobURLString))
- return false;
- element.m_url = URL(URL(), blobURLString);
- return true;
-
- }
-
- return false;
-}
-
-void FormData::encode(Encoder& encoder) const
-{
- encoder.encodeBool(m_alwaysStream);
-
- encoder.encodeBytes(reinterpret_cast<const uint8_t*>(m_boundary.data()), m_boundary.size());
-
- size_t size = m_elements.size();
- encoder.encodeUInt64(size);
- for (size_t i = 0; i < size; ++i)
- encodeElement(encoder, m_elements[i]);
-
- encoder.encodeBool(hasGeneratedFiles()); // For backward compatibility.
-
- encoder.encodeInt64(m_identifier);
-}
-
-PassRefPtr<FormData> FormData::decode(Decoder& decoder)
-{
- RefPtr<FormData> data = ""
-
- if (!decoder.decodeBool(data->m_alwaysStream))
- return 0;
-
- Vector<uint8_t> boundary;
- if (!decoder.decodeBytes(boundary))
- return 0;
- size_t size = boundary.size();
- data->m_boundary.resize(size);
- memcpy(data->m_boundary.data(), boundary.data(), size);
-
- uint64_t elementsSize;
- if (!decoder.decodeUInt64(elementsSize))
- return 0;
- for (size_t i = 0; i < elementsSize; ++i) {
- FormDataElement element;
- if (!decodeElement(decoder, element))
- return 0;
- data->m_elements.append(element);
- }
-
- bool dummy;
- if (!decoder.decodeBool(dummy))
- return 0;
-
- if (!decoder.decodeInt64(data->m_identifier))
- return 0;
-
- return data.release();
-}
-
} // namespace WebCore
Modified: trunk/Source/WebCore/platform/network/FormData.h (170754 => 170755)
--- trunk/Source/WebCore/platform/network/FormData.h 2014-07-03 16:19:07 UTC (rev 170754)
+++ trunk/Source/WebCore/platform/network/FormData.h 2014-07-03 17:05:41 UTC (rev 170755)
@@ -20,6 +20,7 @@
#ifndef FormData_h
#define FormData_h
+#include "BlobData.h"
#include "URL.h"
#include <wtf/Forward.h>
#include <wtf/RefCounted.h>
@@ -68,6 +69,11 @@
{
}
+ template<typename Encoder>
+ void encode(Encoder&) const;
+ template<typename Decoder>
+ static bool decode(Decoder&, FormDataElement& result);
+
Type m_type;
Vector<char> m_data;
String m_filename;
@@ -106,6 +112,79 @@
return !(a == b);
}
+
+template<typename Encoder>
+void FormDataElement::encode(Encoder& encoder) const
+{
+ encoder.encodeEnum(m_type);
+
+ switch (m_type) {
+ case Type::Data:
+ encoder << m_data;
+ break;
+
+ case Type::EncodedFile:
+ encoder << m_filename;
+ encoder << m_generatedFilename;
+ encoder << m_shouldGenerateFile;
+ encoder << m_fileStart;
+ encoder << m_fileLength;
+ encoder << m_expectedFileModificationTime;
+ break;
+
+ case Type::EncodedBlob:
+ encoder << m_url.string();
+ break;
+ }
+}
+
+template<typename Decoder>
+bool FormDataElement::decode(Decoder& decoder, FormDataElement& result)
+{
+ if (!decoder.decodeEnum(result.m_type))
+ return false;
+
+ switch (result.m_type) {
+ case Type::Data:
+ if (!decoder.decode(result.m_data))
+ return false;
+
+ return true;
+
+ case Type::EncodedFile:
+ if (!decoder.decode(result.m_filename))
+ return false;
+ if (!decoder.decode(result.m_generatedFilename))
+ return false;
+ if (!decoder.decode(result.m_shouldGenerateFile))
+ return false;
+ if (!decoder.decode(result.m_fileStart))
+ return false;
+ if (!decoder.decode(result.m_fileLength))
+ return false;
+
+ if (result.m_fileLength != BlobDataItem::toEndOfFile && result.m_fileLength < result.m_fileStart)
+ return false;
+
+ if (!decoder.decode(result.m_expectedFileModificationTime))
+ return false;
+
+ return true;
+
+ case Type::EncodedBlob: {
+ String blobURLString;
+ if (!decoder.decode(blobURLString))
+ return false;
+
+ result.m_url = URL(URL(), blobURLString);
+
+ return true;
+ }
+ }
+
+ return false;
+}
+
class FormData : public RefCounted<FormData> {
public:
enum EncodingType {
@@ -127,7 +206,9 @@
PassRefPtr<FormData> copy() const;
PassRefPtr<FormData> deepCopy() const;
+ template<typename Encoder>
void encode(Encoder&) const;
+ template<typename Decoder>
static PassRefPtr<FormData> decode(Decoder&);
void appendData(const void* data, size_t);
@@ -197,6 +278,35 @@
return !(a == b);
}
+template<typename Encoder>
+void FormData::encode(Encoder& encoder) const
+{
+ encoder << m_alwaysStream;
+ encoder << m_boundary;
+ encoder << m_elements;
+ encoder << m_identifier;
+}
+
+template<typename Decoder>
+PassRefPtr<FormData> FormData::decode(Decoder& decoder)
+{
+ RefPtr<FormData> data = ""
+
+ if (!decoder.decode(data->m_alwaysStream))
+ return nullptr;
+
+ if (!decoder.decode(data->m_boundary))
+ return nullptr;
+
+ if (!decoder.decode(data->m_elements))
+ return nullptr;
+
+ if (!decoder.decode(data->m_identifier))
+ return nullptr;
+
+ return data.release();
+}
+
} // namespace WebCore
#endif
Modified: trunk/Source/WebKit2/ChangeLog (170754 => 170755)
--- trunk/Source/WebKit2/ChangeLog 2014-07-03 16:19:07 UTC (rev 170754)
+++ trunk/Source/WebKit2/ChangeLog 2014-07-03 17:05:41 UTC (rev 170755)
@@ -1,3 +1,14 @@
+2014-07-02 Anders Carlsson <ander...@apple.com>
+
+ Stop using EncoderAdapter/DecoderAdapter for FormData
+ https://bugs.webkit.org/show_bug.cgi?id=134571
+
+ Reviewed by Andreas Kling.
+
+ * Shared/Network/NetworkResourceLoadParameters.cpp:
+ (WebKit::NetworkResourceLoadParameters::encode):
+ (WebKit::NetworkResourceLoadParameters::decode):
+
2014-07-03 Brady Eidson <beid...@apple.com>
Possible crash in IconDatabase in WebCore::IconDatabase::dispatchDidRemoveAllIconsOnMainThread
Modified: trunk/Source/WebKit2/Shared/Network/NetworkResourceLoadParameters.cpp (170754 => 170755)
--- trunk/Source/WebKit2/Shared/Network/NetworkResourceLoadParameters.cpp 2014-07-03 16:19:07 UTC (rev 170754)
+++ trunk/Source/WebKit2/Shared/Network/NetworkResourceLoadParameters.cpp 2014-07-03 17:05:41 UTC (rev 170755)
@@ -28,8 +28,6 @@
#include "ArgumentCoders.h"
#include "DataReference.h"
-#include "DecoderAdapter.h"
-#include "EncoderAdapter.h"
#include "WebCoreArgumentCoders.h"
#if ENABLE(NETWORK_PROCESS)
@@ -37,6 +35,7 @@
using namespace WebCore;
namespace WebKit {
+
NetworkResourceLoadParameters::NetworkResourceLoadParameters()
: identifier(0)
, webPageID(0)
@@ -62,9 +61,7 @@
encoder << static_cast<bool>(request.httpBody());
if (request.httpBody()) {
- EncoderAdapter httpBodyEncoderAdapter;
- request.httpBody()->encode(httpBodyEncoderAdapter);
- encoder << httpBodyEncoderAdapter.dataReference();
+ request.httpBody()->encode(encoder);
const Vector<FormDataElement>& elements = request.httpBody()->elements();
size_t fileCount = 0;
@@ -123,11 +120,10 @@
return false;
if (hasHTTPBody) {
- IPC::DataReference formData;
- if (!decoder.decode(formData))
+ RefPtr<FormData> formData = FormData::decode(decoder);
+ if (!formData)
return false;
- DecoderAdapter httpBodyDecoderAdapter(formData.data(), formData.size());
- result.request.setHTTPBody(FormData::decode(httpBodyDecoderAdapter));
+ result.request.setHTTPBody(formData.release());
if (!decoder.decode(result.requestBodySandboxExtensions))
return false;