Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1077)

Unified Diff: third_party/WebKit/Source/platform/network/FormDataEncoder.cpp

Issue 1998563002: Fix URLSearchParams to use the right encoding algorithm (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/platform/network/FormDataEncoder.cpp
diff --git a/third_party/WebKit/Source/platform/network/FormDataEncoder.cpp b/third_party/WebKit/Source/platform/network/FormDataEncoder.cpp
index 3b7bd1a6ae9b68fea42a4d58e7395841e81ffe68..a64666be1287745205df7dd751ba85f5a0512272 100644
--- a/third_party/WebKit/Source/platform/network/FormDataEncoder.cpp
+++ b/third_party/WebKit/Source/platform/network/FormDataEncoder.cpp
@@ -48,6 +48,12 @@ static inline void append(Vector<char>& buffer, const CString& string)
buffer.append(string.data(), string.length());
}
+static inline void appendPercentEncoded(Vector<char>& buffer, unsigned char c)
+{
+ append(buffer, '%');
+ appendByteAsHex(c, buffer);
+}
+
static void appendQuotedString(Vector<char>& buffer, const CString& string)
{
// Append a string as a quoted value, escaping quotes and line breaks.
@@ -177,7 +183,7 @@ void FormDataEncoder::finishMultiPartHeader(Vector<char>& buffer)
append(buffer, "\r\n\r\n");
}
-void FormDataEncoder::addKeyValuePairAsFormData(Vector<char>& buffer, const CString& key, const CString& value, EncodedFormData::EncodingType encodingType)
+void FormDataEncoder::addKeyValuePairAsFormData(Vector<char>& buffer, const CString& key, const CString& value, EncodedFormData::EncodingType encodingType, Mode mode)
{
if (encodingType == EncodedFormData::TextPlain) {
if (!buffer.isEmpty())
@@ -188,13 +194,13 @@ void FormDataEncoder::addKeyValuePairAsFormData(Vector<char>& buffer, const CStr
} else {
if (!buffer.isEmpty())
append(buffer, '&');
- encodeStringAsFormData(buffer, key);
+ encodeStringAsFormData(buffer, key, mode);
append(buffer, '=');
- encodeStringAsFormData(buffer, value);
+ encodeStringAsFormData(buffer, value, mode);
}
}
-void FormDataEncoder::encodeStringAsFormData(Vector<char>& buffer, const CString& string)
+void FormDataEncoder::encodeStringAsFormData(Vector<char>& buffer, const CString& string, Mode mode)
{
// Same safe characters as Netscape for compatibility.
static const char safeCharacters[] = "-._*";
@@ -204,15 +210,20 @@ void FormDataEncoder::encodeStringAsFormData(Vector<char>& buffer, const CString
for (unsigned i = 0; i < length; ++i) {
unsigned char c = string.data()[i];
- if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9') || strchr(safeCharacters, c)) {
+ if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9') || (c != '\0' && strchr(safeCharacters, c))) {
append(buffer, c);
} else if (c == ' ') {
append(buffer, '+');
- } else if (c == '\n' || (c == '\r' && (i + 1 >= length || string.data()[i + 1] != '\n'))) {
- append(buffer, "%0D%0A");
- } else if (c != '\r') {
- append(buffer, '%');
- appendByteAsHex(c, buffer);
+ } else {
+ if (mode == NormalizeCRLF) {
+ if (c == '\n' || (c == '\r' && (i + 1 >= length || string.data()[i + 1] != '\n'))) {
+ append(buffer, "%0D%0A");
+ } else if (c != '\r') {
+ appendPercentEncoded(buffer, c);
+ }
+ } else {
+ appendPercentEncoded(buffer, c);
+ }
}
}
}
« no previous file with comments | « third_party/WebKit/Source/platform/network/FormDataEncoder.h ('k') | third_party/WebKit/Source/web/WebSearchableFormData.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698